aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--templates/libs/plyr/plyr.js8
-rw-r--r--templates/libs/plyr/plyr.js.map2
-rw-r--r--templates/libs/plyr/plyr.min.js2
-rw-r--r--templates/libs/plyr/plyr.min.js.map2
-rw-r--r--templates/libs/plyr/plyr.polyfilled.js8
-rw-r--r--templates/libs/plyr/plyr.polyfilled.js.map2
-rw-r--r--templates/libs/plyr/plyr.polyfilled.min.js2
-rw-r--r--templates/libs/plyr/plyr.polyfilled.min.js.map2
8 files changed, 14 insertions, 14 deletions
diff --git a/templates/libs/plyr/plyr.js b/templates/libs/plyr/plyr.js
index 24c7e25..9629e71 100644
--- a/templates/libs/plyr/plyr.js
+++ b/templates/libs/plyr/plyr.js
@@ -792,7 +792,7 @@ typeof navigator === "object" && (function (global, factory) {
getQualityOptions: function getQualityOptions() {
// Get sizes from <source> elements
return html5.getSources.call(this).map(function (source) {
- return Number(source.getAttribute('data-res'));
+ return Number(source.getAttribute('data-size'));
}).filter(Boolean);
},
extend: function extend() {
@@ -817,7 +817,7 @@ typeof navigator === "object" && (function (global, factory) {
var sources = html5.getSources.call(player); // Get first match for requested size
var source = sources.find(function (source) {
- return Number(source.getAttribute('size')) === input;
+ return Number(source.getAttribute('data-res')) === input;
}); // No matching source found
if (!source) {
@@ -831,7 +831,7 @@ typeof navigator === "object" && (function (global, factory) {
preload = _player$media.preload,
readyState = _player$media.readyState; // Set new source
- player.media.src = source.getAttribute('data-res'); // Prevent loading if preload="none" and the current source isn't loaded (#1044)
+ player.media.src = source.getAttribute('src'); // Prevent loading if preload="none" and the current source isn't loaded (#1044)
if (preload !== 'none' || readyState) {
// Restore time
@@ -2622,7 +2622,7 @@ typeof navigator === "object" && (function (global, factory) {
var update = true; // If function, run it and use output
if (is.function(this.config.controls)) {
- this.config.controls = this.config.controls.call(this.props);
+ this.config.controls = this.config.controls.call(this, props);
} // Convert falsy controls to empty array (primarily for empty strings)
diff --git a/templates/libs/plyr/plyr.js.map b/templates/libs/plyr/plyr.js.map
index 7f4d06a..c86e3fe 100644
--- a/templates/libs/plyr/plyr.js.map
+++ b/templates/libs/plyr/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","match","querySelectorAll","includes","prototype","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","generateId","prefix","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","create","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","inactive","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EAEA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAAAC,KAAK;EAAA,SAAKA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAnC,GAAiDA,KAAK,CAACC,WAAvD,GAAqE,IAA1E;EAAA,CAA5B;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACF,KAAD,EAAQC,WAAR;EAAA,SAAwBE,OAAO,CAACH,KAAK,IAAIC,WAAT,IAAwBD,KAAK,YAAYC,WAA1C,CAA/B;EAAA,CAAnB;;EACA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAJ,KAAK;EAAA,SAAIA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAvC;EAAA,CAA/B;;EACA,IAAMK,QAAQ,GAAG,SAAXA,QAAW,CAAAL,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BM,MAA9B;EAAA,CAAtB;;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAAP,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BQ,MAA1B,IAAoC,CAACA,MAAM,CAACC,KAAP,CAAaT,KAAb,CAAzC;EAAA,CAAtB;;EACA,IAAMU,QAAQ,GAAG,SAAXA,QAAW,CAAAV,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BW,MAA9B;EAAA,CAAtB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAAZ,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BG,OAA9B;EAAA,CAAvB;;EACA,IAAMU,UAAU,GAAG,SAAbA,UAAa,CAAAb,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0Bc,QAA9B;EAAA,CAAxB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAf,KAAK;EAAA,SAAIgB,KAAK,CAACD,OAAN,CAAcf,KAAd,CAAJ;EAAA,CAArB;;EACA,IAAMiB,SAAS,GAAG,SAAZA,SAAY,CAAAjB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQkB,OAAR,CAAd;EAAA,CAAvB;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAnB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQoB,QAAR,CAAd;EAAA,CAAxB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAArB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQsB,OAAR,CAAd;EAAA,CAAvB;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAvB,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BwB,IAA9B;EAAA,CAAxB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAzB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ0B,KAAR,CAAd;EAAA,CAArB;;EACA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAAA3B,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ4B,aAAR,CAAd;EAAA,CAA7B;;EACA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAA7B,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACC,YAAf,CAAV,IAA0C7B,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACE,MAAf,CAAxD;EAAA,CAAnB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAjC,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQkC,SAAR,CAAV,IAAiC,CAAC9B,iBAAiB,CAACJ,KAAD,CAAlB,IAA6BU,QAAQ,CAACV,KAAK,CAACmC,IAAP,CAA1E;EAAA,CAArB;;EAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAApC,KAAK;EAAA,SACjBI,iBAAiB,CAACJ,KAAD,CAAjB,IACC,CAACU,QAAQ,CAACV,KAAD,CAAR,IAAmBe,OAAO,CAACf,KAAD,CAA1B,IAAqCmB,UAAU,CAACnB,KAAD,CAAhD,KAA4D,CAACA,KAAK,CAACqC,MADpE,IAEChC,QAAQ,CAACL,KAAD,CAAR,IAAmB,CAACM,MAAM,CAACgC,IAAP,CAAYtC,KAAZ,EAAmBqC,MAHvB;EAAA,CAArB;;EAKA,IAAME,KAAK,GAAG,SAARA,KAAQ,CAAAvC,KAAK,EAAI;EACnB;EACA,MAAIE,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACU,GAAf,CAAd,EAAmC;EAC/B,WAAO,IAAP;EACH,GAJkB;;;EAOnB,MAAI,CAAC9B,QAAQ,CAACV,KAAD,CAAb,EAAsB;EAClB,WAAO,KAAP;EACH,GATkB;;;EAYnB,MAAIyC,MAAM,GAAGzC,KAAb;;EACA,MAAI,CAACA,KAAK,CAAC0C,UAAN,CAAiB,SAAjB,CAAD,IAAgC,CAAC1C,KAAK,CAAC0C,UAAN,CAAiB,UAAjB,CAArC,EAAmE;EAC/DD,IAAAA,MAAM,oBAAazC,KAAb,CAAN;EACH;;EAED,MAAI;EACA,WAAO,CAACoC,OAAO,CAAC,IAAII,GAAJ,CAAQC,MAAR,EAAgBE,QAAjB,CAAf;EACH,GAFD,CAEE,OAAOC,CAAP,EAAU;EACR,WAAO,KAAP;EACH;EACJ,CAtBD;;AAwBA,WAAe;EACXC,EAAAA,eAAe,EAAEzC,iBADN;EAEX0C,EAAAA,MAAM,EAAEzC,QAFG;EAGX0C,EAAAA,MAAM,EAAExC,QAHG;EAIXkC,EAAAA,MAAM,EAAE/B,QAJG;EAKXsC,EAAAA,OAAO,EAAEpC,SALE;EAMXqC,EAAAA,QAAQ,EAAEpC,UANC;EAOXqC,EAAAA,KAAK,EAAEnC,OAPI;EAQXoC,EAAAA,OAAO,EAAElC,SARE;EASXmC,EAAAA,QAAQ,EAAEjC,UATC;EAUXkC,EAAAA,OAAO,EAAEhC,SAVE;EAWXiC,EAAAA,QAAQ,EAAE/B,UAXC;EAYXgC,EAAAA,KAAK,EAAE9B,OAZI;EAaX+B,EAAAA,aAAa,EAAE7B,eAbJ;EAcX8B,EAAAA,GAAG,EAAE5B,KAdM;EAeX6B,EAAAA,KAAK,EAAEzB,OAfI;EAgBX0B,EAAAA,GAAG,EAAEpB,KAhBM;EAiBXqB,EAAAA,KAAK,EAAExB;EAjBI,CAAf;;ECnDA;AACA,EAMA;EACA;;EACA,IAAMyB,wBAAwB,GAAI,YAAM;EACpC;EACA,MAAIC,SAAS,GAAG,KAAhB;;EACA,MAAI;EACA,QAAMC,OAAO,GAAGzD,MAAM,CAAC0D,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;EACjDC,MAAAA,GADiD,iBAC3C;EACFH,QAAAA,SAAS,GAAG,IAAZ;EACA,eAAO,IAAP;EACH;EAJgD,KAArC,CAAhB;EAMAhC,IAAAA,MAAM,CAACoC,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsCH,OAAtC;EACAjC,IAAAA,MAAM,CAACqC,mBAAP,CAA2B,MAA3B,EAAmC,IAAnC,EAAyCJ,OAAzC;EACH,GATD,CASE,OAAOnB,CAAP,EAAU;EAEX;;EAED,SAAOkB,SAAP;EACH,CAjBgC,EAAjC;;;AAoBA,EAAO,SAASM,cAAT,CAAwBf,OAAxB,EAAiCE,KAAjC,EAAwCc,QAAxC,EAAmG;EAAA;;EAAA,MAAjDC,MAAiD,uEAAxC,KAAwC;EAAA,MAAjCC,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;;EACtG;EACA,MAAI,CAACnB,OAAD,IAAY,EAAE,sBAAsBA,OAAxB,CAAZ,IAAgDoB,EAAE,CAACb,KAAH,CAASL,KAAT,CAAhD,IAAmE,CAACkB,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAxE,EAA+F;EAC3F;EACH,GAJqG;;;EAOtG,MAAMK,MAAM,GAAGnB,KAAK,CAACoB,KAAN,CAAY,GAAZ,CAAf,CAPsG;EAUtG;;EACA,MAAIZ,OAAO,GAAGS,OAAd,CAXsG;;EActG,MAAIX,wBAAJ,EAA8B;EAC1BE,IAAAA,OAAO,GAAG;EACN;EACAQ,MAAAA,OAAO,EAAPA,OAFM;EAGN;EACAC,MAAAA,OAAO,EAAPA;EAJM,KAAV;EAMH,GArBqG;;;EAwBtGE,EAAAA,MAAM,CAACE,OAAP,CAAe,UAAAC,IAAI,EAAI;EACnB,QAAI,KAAI,IAAI,KAAI,CAACC,cAAb,IAA+BR,MAAnC,EAA2C;EACvC;EACA,MAAA,KAAI,CAACQ,cAAL,CAAoBC,IAApB,CAAyB;EAAE1B,QAAAA,OAAO,EAAPA,OAAF;EAAWwB,QAAAA,IAAI,EAAJA,IAAX;EAAiBR,QAAAA,QAAQ,EAARA,QAAjB;EAA2BN,QAAAA,OAAO,EAAPA;EAA3B,OAAzB;EACH;;EAEDV,IAAAA,OAAO,CAACiB,MAAM,GAAG,kBAAH,GAAwB,qBAA/B,CAAP,CAA6DO,IAA7D,EAAmER,QAAnE,EAA6EN,OAA7E;EACH,GAPD;EAQH;;AAGD,EAAO,SAASiB,EAAT,CAAY3B,OAAZ,EAA6E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;EAChFJ,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CL,QAA3C,EAAqD,IAArD,EAA2DE,OAA3D,EAAoEC,OAApE;EACH;;AAGD,EAAO,SAASU,GAAT,CAAa7B,OAAb,EAA8E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;EACjFJ,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CL,QAA3C,EAAqD,KAArD,EAA4DE,OAA5D,EAAqEC,OAArE;EACH;;AAGD,EAAO,SAASW,IAAT,CAAc9B,OAAd,EAA+E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;;EAClF,WAASY,YAAT,GAA+B;EAC3BF,IAAAA,GAAG,CAAC7B,OAAD,EAAUqB,MAAV,EAAkBU,YAAlB,EAAgCb,OAAhC,EAAyCC,OAAzC,CAAH;;EAD2B,sCAANa,IAAM;EAANA,MAAAA,IAAM;EAAA;;EAE3BhB,IAAAA,QAAQ,CAACiB,KAAT,CAAe,IAAf,EAAqBD,IAArB;EACH;;EAEDjB,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CU,YAA3C,EAAyD,IAAzD,EAA+Db,OAA/D,EAAwEC,OAAxE;EACH;;AAGD,EAAO,SAASe,YAAT,CAAsBlC,OAAtB,EAAwE;EAAA,MAAzCwB,IAAyC,uEAAlC,EAAkC;EAAA,MAA9BW,OAA8B,uEAApB,KAAoB;EAAA,MAAbC,MAAa,uEAAJ,EAAI;;EAC3E;EACA,MAAI,CAAChB,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwBoB,EAAE,CAACb,KAAH,CAASiB,IAAT,CAA5B,EAA4C;EACxC;EACH,GAJ0E;;;EAO3E,MAAMtB,KAAK,GAAG,IAAImC,WAAJ,CAAgBb,IAAhB,EAAsB;EAChCW,IAAAA,OAAO,EAAPA,OADgC;EAEhCC,IAAAA,MAAM,EAAEnF,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkBF,MAAlB,EAA0B;EAC9BG,MAAAA,IAAI,EAAE;EADwB,KAA1B;EAFwB,GAAtB,CAAd,CAP2E;;EAe3EvC,EAAAA,OAAO,CAACwC,aAAR,CAAsBtC,KAAtB;EACH;;AAGD,EAAO,SAASuC,eAAT,GAA2B;EAC9B,MAAI,QAAQ,KAAKhB,cAAjB,EAAiC;EAC7B,SAAKA,cAAL,CAAoBF,OAApB,CAA4B,UAAAmB,IAAI,EAAI;EAAA,UACxB1C,OADwB,GACa0C,IADb,CACxB1C,OADwB;EAAA,UACfwB,IADe,GACakB,IADb,CACflB,IADe;EAAA,UACTR,QADS,GACa0B,IADb,CACT1B,QADS;EAAA,UACCN,OADD,GACagC,IADb,CACChC,OADD;EAEhCV,MAAAA,OAAO,CAACc,mBAAR,CAA4BU,IAA5B,EAAkCR,QAAlC,EAA4CN,OAA5C;EACH,KAHD;EAKA,SAAKe,cAAL,GAAsB,EAAtB;EACH;EACJ;;AAGD,EAAO,SAASkB,KAAT,GAAiB;EAAA;;EACpB,SAAO,IAAIC,OAAJ,CACH,UAAAC,OAAO;EAAA,WAAK,MAAI,CAACF,KAAL,GAAaG,UAAU,CAACD,OAAD,EAAU,CAAV,CAAvB,GAAsClB,EAAE,CAACC,IAAH,CAAQ,MAAR,EAAc,MAAI,CAACmB,QAAL,CAAcC,SAA5B,EAAuC,OAAvC,EAAgDH,OAAhD,CAA3C;EAAA,GADJ,EAELI,IAFK,CAEA,YAAM,EAFN,CAAP;EAGH;;EC/GM,SAASC,IAAT,CAAcH,QAAd,EAAwBI,OAAxB,EAAiC;EACpC;EACA,MAAMC,OAAO,GAAGL,QAAQ,CAAC/D,MAAT,GAAkB+D,QAAlB,GAA6B,CAACA,QAAD,CAA7C,CAFoC;EAKpC;;EACApF,EAAAA,KAAK,CAAC0F,IAAN,CAAWD,OAAX,EACKE,OADL,GAEK/B,OAFL,CAEa,UAACvB,OAAD,EAAUuD,KAAV,EAAoB;EACzB,QAAMC,KAAK,GAAGD,KAAK,GAAG,CAAR,GAAYJ,OAAO,CAACM,SAAR,CAAkB,IAAlB,CAAZ,GAAsCN,OAApD,CADyB;;EAIzB,QAAMO,MAAM,GAAG1D,OAAO,CAAC2D,UAAvB;EACA,QAAMC,OAAO,GAAG5D,OAAO,CAAC6D,WAAxB,CALyB;EAQzB;;EACAL,IAAAA,KAAK,CAACM,WAAN,CAAkB9D,OAAlB,EATyB;EAYzB;EACA;;EACA,QAAI4D,OAAJ,EAAa;EACTF,MAAAA,MAAM,CAACK,YAAP,CAAoBP,KAApB,EAA2BI,OAA3B;EACH,KAFD,MAEO;EACHF,MAAAA,MAAM,CAACI,WAAP,CAAmBN,KAAnB;EACH;EACJ,GArBL;EAsBH;;AAGD,EAAO,SAASQ,aAAT,CAAuBhE,OAAvB,EAAgCiE,UAAhC,EAA4C;EAC/C,MAAI,CAAC7C,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwBoB,EAAE,CAACb,KAAH,CAAS0D,UAAT,CAA5B,EAAkD;EAC9C;EACH,GAH8C;EAM/C;;;EACAhH,EAAAA,MAAM,CAACiH,OAAP,CAAeD,UAAf,EACKE,MADL,CACY;EAAA;EAAA,QAAIC,KAAJ;;EAAA,WAAe,CAAChD,EAAE,CAAC5B,eAAH,CAAmB4E,KAAnB,CAAhB;EAAA,GADZ,EAEK7C,OAFL,CAEa;EAAA;EAAA,QAAE8C,GAAF;EAAA,QAAOD,KAAP;;EAAA,WAAkBpE,OAAO,CAACsE,YAAR,CAAqBD,GAArB,EAA0BD,KAA1B,CAAlB;EAAA,GAFb;EAGH;;AAGD,EAAO,SAASG,aAAT,CAAuB/C,IAAvB,EAA6ByC,UAA7B,EAAyCO,IAAzC,EAA+C;EAClD;EACA,MAAMxE,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB/C,IAAvB,CAAhB,CAFkD;;EAKlD,MAAIJ,EAAE,CAAC3B,MAAH,CAAUwE,UAAV,CAAJ,EAA2B;EACvBD,IAAAA,aAAa,CAAChE,OAAD,EAAUiE,UAAV,CAAb;EACH,GAPiD;;;EAUlD,MAAI7C,EAAE,CAAChC,MAAH,CAAUoF,IAAV,CAAJ,EAAqB;EACjBxE,IAAAA,OAAO,CAAC0E,SAAR,GAAoBF,IAApB;EACH,GAZiD;;;EAelD,SAAOxE,OAAP;EACH;;AAGD,EAAO,SAAS2E,WAAT,CAAqB3E,OAArB,EAA8B4E,MAA9B,EAAsC;EACzC,MAAI,CAACxD,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwB,CAACoB,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAA7B,EAAiD;EAC7C;EACH;;EAEDA,EAAAA,MAAM,CAACjB,UAAP,CAAkBI,YAAlB,CAA+B/D,OAA/B,EAAwC4E,MAAM,CAACf,WAA/C;EACH;;AAGD,EAAO,SAASgB,aAAT,CAAuBrD,IAAvB,EAA6BkC,MAA7B,EAAqCO,UAArC,EAAiDO,IAAjD,EAAuD;EAC1D,MAAI,CAACpD,EAAE,CAACpB,OAAH,CAAW0D,MAAX,CAAL,EAAyB;EACrB;EACH;;EAEDA,EAAAA,MAAM,CAACI,WAAP,CAAmBS,aAAa,CAAC/C,IAAD,EAAOyC,UAAP,EAAmBO,IAAnB,CAAhC;EACH;;AAGD,EAAO,SAASM,aAAT,CAAuB9E,OAAvB,EAAgC;EACnC,MAAIoB,EAAE,CAACrB,QAAH,CAAYC,OAAZ,KAAwBoB,EAAE,CAACvB,KAAH,CAASG,OAAT,CAA5B,EAA+C;EAC3CrC,IAAAA,KAAK,CAAC0F,IAAN,CAAWrD,OAAX,EAAoBuB,OAApB,CAA4BuD,aAA5B;EACA;EACH;;EAED,MAAI,CAAC1D,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwB,CAACoB,EAAE,CAACpB,OAAH,CAAWA,OAAO,CAAC2D,UAAnB,CAA7B,EAA6D;EACzD;EACH;;EAED3D,EAAAA,OAAO,CAAC2D,UAAR,CAAmBoB,WAAnB,CAA+B/E,OAA/B;EACH;;AAGD,EAAO,SAASgF,YAAT,CAAsBhF,OAAtB,EAA+B;EAClC,MAAI,CAACoB,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAHiC,MAK5BhB,MAL4B,GAKjBgB,OAAO,CAACiF,UALS,CAK5BjG,MAL4B;;EAOlC,SAAOA,MAAM,GAAG,CAAhB,EAAmB;EACfgB,IAAAA,OAAO,CAAC+E,WAAR,CAAoB/E,OAAO,CAACkF,SAA5B;EACAlG,IAAAA,MAAM,IAAI,CAAV;EACH;EACJ;;AAGD,EAAO,SAASmG,cAAT,CAAwBC,QAAxB,EAAkCC,QAAlC,EAA4C;EAC/C,MAAI,CAACjE,EAAE,CAACpB,OAAH,CAAWqF,QAAX,CAAD,IAAyB,CAACjE,EAAE,CAACpB,OAAH,CAAWqF,QAAQ,CAAC1B,UAApB,CAA1B,IAA6D,CAACvC,EAAE,CAACpB,OAAH,CAAWoF,QAAX,CAAlE,EAAwF;EACpF,WAAO,IAAP;EACH;;EAEDC,EAAAA,QAAQ,CAAC1B,UAAT,CAAoB2B,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;EAEA,SAAOD,QAAP;EACH;;AAGD,EAAO,SAASG,yBAAT,CAAmCC,GAAnC,EAAwCC,kBAAxC,EAA4D;EAC/D;EACA;EACA;EACA;EAEA,MAAI,CAACrE,EAAE,CAAChC,MAAH,CAAUoG,GAAV,CAAD,IAAmBpE,EAAE,CAACb,KAAH,CAASiF,GAAT,CAAvB,EAAsC;EAClC,WAAO,EAAP;EACH;;EAED,MAAMvB,UAAU,GAAG,EAAnB;EACA,MAAMyB,QAAQ,GAAGD,kBAAjB;EAEAD,EAAAA,GAAG,CAAClE,KAAJ,CAAU,GAAV,EAAeC,OAAf,CAAuB,UAAAoE,CAAC,EAAI;EACxB;EACA,QAAMC,QAAQ,GAAGD,CAAC,CAACE,IAAF,EAAjB;EACA,QAAMC,SAAS,GAAGF,QAAQ,CAACG,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;EACA,QAAMC,QAAQ,GAAGJ,QAAQ,CAACG,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB,CAJwB;;EAOxB,QAAME,KAAK,GAAGD,QAAQ,CAAC1E,KAAT,CAAe,GAAf,CAAd;EACA,QAAM+C,GAAG,GAAG4B,KAAK,CAAC,CAAD,CAAjB;EACA,QAAM7B,KAAK,GAAG6B,KAAK,CAACjH,MAAN,GAAe,CAAf,GAAmBiH,KAAK,CAAC,CAAD,CAAL,CAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE,CATwB;;EAYxB,QAAMG,KAAK,GAAGN,QAAQ,CAACO,MAAT,CAAgB,CAAhB,CAAd;;EAEA,YAAQD,KAAR;EACI,WAAK,GAAL;EACI;EACA,YAAI9E,EAAE,CAAC3B,MAAH,CAAUiG,QAAV,KAAuBtE,EAAE,CAAChC,MAAH,CAAUsG,QAAQ,CAACU,KAAnB,CAA3B,EAAsD;EAClDV,UAAAA,QAAQ,CAACU,KAAT,eAAsBN,SAAtB;EACH;;EAED7B,QAAAA,UAAU,CAACmC,KAAX,GAAmBN,SAAnB;EACA;;EAEJ,WAAK,GAAL;EACI;EACA7B,QAAAA,UAAU,CAACoC,EAAX,GAAgBT,QAAQ,CAACG,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;EACA;;EAEJ,WAAK,GAAL;EACI;EACA9B,QAAAA,UAAU,CAACI,GAAD,CAAV,GAAkBD,KAAlB;EAEA;;EAEJ;EACI;EAtBR;EAwBH,GAtCD;EAwCA,SAAOH,UAAP;EACH;;AAGD,EAAO,SAASqC,YAAT,CAAsBtG,OAAtB,EAA+BuG,MAA/B,EAAuC;EAC1C,MAAI,CAACnF,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAED,MAAIwG,IAAI,GAAGD,MAAX;;EAEA,MAAI,CAACnF,EAAE,CAACzB,OAAH,CAAW6G,IAAX,CAAL,EAAuB;EACnBA,IAAAA,IAAI,GAAG,CAACxG,OAAO,CAACuG,MAAhB;EACH;;EAED,MAAIC,IAAJ,EAAU;EACNxG,IAAAA,OAAO,CAACsE,YAAR,CAAqB,QAArB,EAA+B,EAA/B;EACH,GAFD,MAEO;EACHtE,IAAAA,OAAO,CAACyG,eAAR,CAAwB,QAAxB;EACH;EACJ;;AAGD,EAAO,SAASC,WAAT,CAAqB1G,OAArB,EAA8B8F,SAA9B,EAAyCa,KAAzC,EAAgD;EACnD,MAAIvF,EAAE,CAACrB,QAAH,CAAYC,OAAZ,CAAJ,EAA0B;EACtB,WAAOrC,KAAK,CAAC0F,IAAN,CAAWrD,OAAX,EAAoB4G,GAApB,CAAwB,UAAArH,CAAC;EAAA,aAAImH,WAAW,CAACnH,CAAD,EAAIuG,SAAJ,EAAea,KAAf,CAAf;EAAA,KAAzB,CAAP;EACH;;EAED,MAAIvF,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAJ,EAAyB;EACrB,QAAI6G,MAAM,GAAG,QAAb;;EACA,QAAI,OAAOF,KAAP,KAAiB,WAArB,EAAkC;EAC9BE,MAAAA,MAAM,GAAGF,KAAK,GAAG,KAAH,GAAW,QAAzB;EACH;;EAED3G,IAAAA,OAAO,CAAC8G,SAAR,CAAkBD,MAAlB,EAA0Bf,SAA1B;EACA,WAAO9F,OAAO,CAAC8G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAAP;EACH;;EAED,SAAO,KAAP;EACH;;AAGD,EAAO,SAASkB,QAAT,CAAkBhH,OAAlB,EAA2B8F,SAA3B,EAAsC;EACzC,SAAO1E,EAAE,CAACpB,OAAH,CAAWA,OAAX,KAAuBA,OAAO,CAAC8G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAA9B;EACH;;AAGD,EAAO,SAASmB,OAAT,CAAiBjH,OAAjB,EAA0B4F,QAA1B,EAAoC;AACvC;EAEA,WAASsB,KAAT,GAAiB;EACb,WAAOvJ,KAAK,CAAC0F,IAAN,CAAWoB,QAAQ,CAAC0C,gBAAT,CAA0BvB,QAA1B,CAAX,EAAgDwB,QAAhD,CAAyD,IAAzD,CAAP;EACH;;EAED,MAAMH,OAAO,GACTI,AAIAH,KALJ;EAOA,SAAOD,OAAO,CAACrF,IAAR,CAAa5B,OAAb,EAAsB4F,QAAtB,CAAP;EACH;;AAGD,EAAO,SAAS0B,WAAT,CAAqB1B,QAArB,EAA+B;EAClC,SAAO,KAAK7C,QAAL,CAAcC,SAAd,CAAwBmE,gBAAxB,CAAyCvB,QAAzC,CAAP;EACH;;AAGD,EAAO,SAAS2B,UAAT,CAAoB3B,QAApB,EAA8B;EACjC,SAAO,KAAK7C,QAAL,CAAcC,SAAd,CAAwBwE,aAAxB,CAAsC5B,QAAtC,CAAP;EACH;;AAGD,EAAO,SAAS6B,SAAT,GAAmD;EAAA,MAAhCzH,OAAgC,uEAAtB,IAAsB;EAAA,MAAhBiB,MAAgB,uEAAP,KAAO;;EACtD,MAAI,CAACG,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAED,MAAM0H,SAAS,GAAGJ,WAAW,CAAC1F,IAAZ,CAAiB,IAAjB,EAAuB,yDAAvB,CAAlB;EACA,MAAM+F,KAAK,GAAGD,SAAS,CAAC,CAAD,CAAvB;EACA,MAAME,IAAI,GAAGF,SAAS,CAACA,SAAS,CAAC1I,MAAV,GAAmB,CAApB,CAAtB;;EAEA,MAAM6I,IAAI,GAAG,SAAPA,IAAO,CAAA3H,KAAK,EAAI;EAClB;EACA,QAAIA,KAAK,CAACmE,GAAN,KAAc,KAAd,IAAuBnE,KAAK,CAAC4H,OAAN,KAAkB,CAA7C,EAAgD;EAC5C;EACH,KAJiB;;;EAOlB,QAAMC,OAAO,GAAGtD,QAAQ,CAACuD,aAAzB;;EAEA,QAAID,OAAO,KAAKH,IAAZ,IAAoB,CAAC1H,KAAK,CAAC+H,QAA/B,EAAyC;EACrC;EACAN,MAAAA,KAAK,CAACO,KAAN;EACAhI,MAAAA,KAAK,CAACiI,cAAN;EACH,KAJD,MAIO,IAAIJ,OAAO,KAAKJ,KAAZ,IAAqBzH,KAAK,CAAC+H,QAA/B,EAAyC;EAC5C;EACAL,MAAAA,IAAI,CAACM,KAAL;EACAhI,MAAAA,KAAK,CAACiI,cAAN;EACH;EACJ,GAlBD;;EAoBApH,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B,KAAKmB,QAAL,CAAcC,SAAxC,EAAmD,SAAnD,EAA8D6E,IAA9D,EAAoE5G,MAApE,EAA4E,KAA5E;EACH;;AAGD,EAAO,SAASmH,QAAT,GAAoD;EAAA,MAAlCpI,OAAkC,uEAAxB,IAAwB;EAAA,MAAlBqI,QAAkB,uEAAP,KAAO;;EACvD,MAAI,CAACjH,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH,GAHsD;;;EAMvDA,EAAAA,OAAO,CAACkI,KAAR,CAAc;EAAEI,IAAAA,aAAa,EAAE;EAAjB,GAAd,EANuD;;EASvD,MAAID,QAAJ,EAAc;EACV3B,IAAAA,WAAW,CAAC1G,OAAD,EAAU,KAAKuI,MAAL,CAAYC,UAAZ,CAAuBH,QAAjC,CAAX;EACH;EACJ;;EC7SD;AACA,EAMO,IAAMI,kBAAkB,GAAI,YAAM;EACrC,MAAMzI,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB,MAAvB,CAAhB;EAEA,MAAMlD,MAAM,GAAG;EACXqH,IAAAA,gBAAgB,EAAE,qBADP;EAEXC,IAAAA,aAAa,EAAE,eAFJ;EAGXC,IAAAA,WAAW,EAAE,+BAHF;EAIXC,IAAAA,UAAU,EAAE;EAJD,GAAf;EAOA,MAAMrH,IAAI,GAAGvE,MAAM,CAACgC,IAAP,CAAYoC,MAAZ,EAAoByH,IAApB,CAAyB,UAAA5I,KAAK;EAAA,WAAIF,OAAO,CAAC+I,KAAR,CAAc7I,KAAd,MAAyB8I,SAA7B;EAAA,GAA9B,CAAb;EAEA,SAAO5H,EAAE,CAAChC,MAAH,CAAUoC,IAAV,IAAkBH,MAAM,CAACG,IAAD,CAAxB,GAAiC,KAAxC;EACH,CAbiC,EAA3B;;AAgBP,EAAO,SAASyH,OAAT,CAAiBjJ,OAAjB,EAA0B;EAC7B8C,EAAAA,UAAU,CAAC,YAAM;EACb,QAAI;EACAwD,MAAAA,YAAY,CAACtG,OAAD,EAAU,IAAV,CAAZ;EACAA,MAAAA,OAAO,CAACkJ,YAAR,CAFA;;EAGA5C,MAAAA,YAAY,CAACtG,OAAD,EAAU,KAAV,CAAZ;EACH,KAJD,CAIE,OAAOT,CAAP,EAAU;EAEX;EACJ,GARS,EAQP,CARO,CAAV;EASH;;ECjCD;EACA;EACA;EACA;EAEA,IAAM4J,OAAO,GAAG;EACZC,EAAAA,IAAI;EAAE;EAAe,EAAS,CAAC,CAAC3E,QAAQ,CAAC4E,YAD7B;EAEZC,EAAAA,QAAQ,EAAE,sBAAsB7E,QAAQ,CAAC8E,eAAT,CAAyBR,KAA/C,IAAwD,CAAC,OAAOS,IAAP,CAAYC,SAAS,CAACC,SAAtB,CAFvD;EAGZC,EAAAA,QAAQ,EAAE,kBAAkBH,IAAlB,CAAuBC,SAAS,CAACG,QAAjC,CAHE;EAIZC,EAAAA,KAAK,EAAE,uBAAuBL,IAAvB,CAA4BC,SAAS,CAACG,QAAtC;EAJK,CAAhB;;ECKA,IAAME,aAAa,GAAG;EAClB,eAAa,QADK;EAElB,eAAa,GAFK;EAGlB,gBAAc,aAHI;EAIlB,eAAa,wBAJK;EAKlB,eAAa;EALK,CAAtB;;EASA,IAAMC,OAAO,GAAG;EACZ;EACAC,EAAAA,KAAK,EAAE,iBAAiBvF,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAFZ;EAGZ0F,EAAAA,KAAK,EAAE,iBAAiBxF,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAHZ;EAKZ;EACA;EACA2F,EAAAA,KAPY,iBAON1I,IAPM,EAOA2I,QAPA,EAOUC,WAPV,EAOuB;EAC/B,QAAMC,aAAa,GAAGlB,OAAO,CAACQ,QAAR,IAAoBS,WAApB,IAAmCL,OAAO,CAACK,WAAjE;EACA,QAAME,GAAG,GAAGP,OAAO,CAACvI,IAAD,CAAP,IAAiB2I,QAAQ,KAAK,OAA1C;EACA,QAAMI,EAAE,GAAGD,GAAG,IAAIP,OAAO,CAACS,UAAf,KAA8BhJ,IAAI,KAAK,OAAT,IAAoB,CAAC2H,OAAO,CAACQ,QAA7B,IAAyCU,aAAvE,CAAX;EAEA,WAAO;EACHC,MAAAA,GAAG,EAAHA,GADG;EAEHC,MAAAA,EAAE,EAAFA;EAFG,KAAP;EAIH,GAhBW;EAkBZ;EACA;EACAE,EAAAA,GAAG,EAAG,YAAM;EACR,QAAItB,OAAO,CAACQ,QAAZ,EAAsB;EAClB,aAAO,KAAP;EACH,KAHO;EAMR;;;EACA,QAAIvI,EAAE,CAACxB,QAAH,CAAY2E,aAAa,CAAC,OAAD,CAAb,CAAuBmG,yBAAnC,CAAJ,EAAmE;EAC/D,aAAO,IAAP;EACH,KATO;EAYR;;;EACA,QAAIjG,QAAQ,CAACkG,uBAAT,IAAoC,CAACpG,aAAa,CAAC,OAAD,CAAb,CAAuBqG,uBAAhE,EAAyF;EACrF,aAAO,IAAP;EACH;;EAED,WAAO,KAAP;EACH,GAlBI,EApBO;EAwCZ;EACA;EACAC,EAAAA,OAAO,EAAEzJ,EAAE,CAACxB,QAAH,CAAYnB,MAAM,CAACqM,qCAAnB,CA1CG;EA4CZ;EACA;EACAV,EAAAA,WAAW,EAAE,iBAAiB3F,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CA9ClB;EAgDZ;EACA;EACA;EACAwG,EAAAA,IAnDY,gBAmDPC,SAnDO,EAmDI;EAAA,2BACQA,SAAS,CAAC1J,KAAV,CAAgB,GAAhB,CADR;EAAA;EAAA,QACL2J,SADK;;EAEZ,QAAIzJ,IAAI,GAAGwJ,SAAX,CAFY;;EAKZ,QAAI,CAAC,KAAKE,OAAN,IAAiBD,SAAS,KAAK,KAAKzJ,IAAxC,EAA8C;EAC1C,aAAO,KAAP;EACH,KAPW;;;EAUZ,QAAIvE,MAAM,CAACgC,IAAP,CAAY6K,aAAZ,EAA2B1C,QAA3B,CAAoC5F,IAApC,CAAJ,EAA+C;EAC3CA,MAAAA,IAAI,yBAAiBsI,aAAa,CAACkB,SAAD,CAA9B,OAAJ;EACH;;EAED,QAAI;EACA,aAAOlO,OAAO,CAAC0E,IAAI,IAAI,KAAK2J,KAAL,CAAWC,WAAX,CAAuB5J,IAAvB,EAA6BuE,OAA7B,CAAqC,IAArC,EAA2C,EAA3C,CAAT,CAAd;EACH,KAFD,CAEE,OAAOxG,CAAP,EAAU;EACR,aAAO,KAAP;EACH;EACJ,GAtEW;EAwEZ;EACA8L,EAAAA,UAAU,EAAE,gBAAgB5G,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAzEhB;EA2EZ;EACAiG,EAAAA,UAAU,EAAG,YAAM;EACf,QAAMc,KAAK,GAAG7G,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAAd;EACA+G,IAAAA,KAAK,CAAC9J,IAAN,GAAa,OAAb;EACA,WAAO8J,KAAK,CAAC9J,IAAN,KAAe,OAAtB;EACH,GAJW,EA5EA;EAkFZ;EACA;EACA+J,EAAAA,KAAK,EAAE,kBAAkB9G,QAAQ,CAAC8E,eApFtB;EAsFZ;EACAiC,EAAAA,WAAW,EAAE/C,kBAAkB,KAAK,KAvFxB;EAyFZ;EACA;EACAgD,EAAAA,aAAa,EAAE,gBAAgBhN,MAAhB,IAA0BA,MAAM,CAACiN,UAAP,CAAkB,0BAAlB,EAA8CzE;EA3F3E,CAAhB;;ECnBA;AACA,EAOA,IAAM0E,KAAK,GAAG;EACVC,EAAAA,UADU,wBACG;EAAA;;EACT,QAAI,CAAC,KAAKV,OAAV,EAAmB;EACf,aAAO,EAAP;EACH;;EAED,QAAMW,OAAO,GAAGlO,KAAK,CAAC0F,IAAN,CAAW,KAAK8H,KAAL,CAAWhE,gBAAX,CAA4B,QAA5B,CAAX,CAAhB,CALS;;EAQT,WAAO0E,OAAO,CAAC1H,MAAR,CAAe,UAAA2H,MAAM;EAAA,aAAI/B,OAAO,CAACgB,IAAR,CAAanJ,IAAb,CAAkB,KAAlB,EAAwBkK,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAxB,CAAJ;EAAA,KAArB,CAAP;EACH,GAVS;EAYV;EACAC,EAAAA,iBAbU,+BAaU;EAChB;EACA,WAAOL,KAAK,CAACC,UAAN,CACFhK,IADE,CACG,IADH,EAEFgF,GAFE,CAEE,UAAAkF,MAAM;EAAA,aAAI3O,MAAM,CAAC2O,MAAM,CAACC,YAAP,CAAoB,UAApB,CAAD,CAAV;EAAA,KAFR,EAGF5H,MAHE,CAGKrH,OAHL,CAAP;EAIH,GAnBS;EAqBVmP,EAAAA,MArBU,oBAqBD;EACL,QAAI,CAAC,KAAKf,OAAV,EAAmB;EACf;EACH;;EAED,QAAMgB,MAAM,GAAG,IAAf,CALK;;EAQLjP,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,SAApC,EAA+C;EAC3CvK,MAAAA,GAD2C,iBACrC;EACF;EACA,YAAMiL,OAAO,GAAGF,KAAK,CAACC,UAAN,CAAiBhK,IAAjB,CAAsBsK,MAAtB,CAAhB;EACA,YAAMJ,MAAM,GAAGD,OAAO,CAAC/C,IAAR,CAAa,UAAAgD,MAAM;EAAA,iBAAIA,MAAM,CAACC,YAAP,CAAoB,KAApB,MAA+BG,MAAM,CAACJ,MAA1C;EAAA,SAAnB,CAAf,CAHE;;EAMF,eAAOA,MAAM,IAAI3O,MAAM,CAAC2O,MAAM,CAACC,YAAP,CAAoB,UAApB,CAAD,CAAvB;EACH,OAR0C;EAS3CI,MAAAA,GAT2C,eASvCxP,KATuC,EAShC;EACP;EACA,YAAMkP,OAAO,GAAGF,KAAK,CAACC,UAAN,CAAiBhK,IAAjB,CAAsBsK,MAAtB,CAAhB,CAFO;;EAKP,YAAMJ,MAAM,GAAGD,OAAO,CAAC/C,IAAR,CAAa,UAAAgD,MAAM;EAAA,iBAAI3O,MAAM,CAAC2O,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAD,CAAN,KAAwCpP,KAA5C;EAAA,SAAnB,CAAf,CALO;;EAQP,YAAI,CAACmP,MAAL,EAAa;EACT;EACH,SAVM;;;EAAA,4BAa8CI,MAAM,CAACf,KAbrD;EAAA,YAaCiB,WAbD,iBAaCA,WAbD;EAAA,YAacC,MAbd,iBAacA,MAbd;EAAA,YAasBC,OAbtB,iBAasBA,OAbtB;EAAA,YAa+BC,UAb/B,iBAa+BA,UAb/B;;EAgBPL,QAAAA,MAAM,CAACf,KAAP,CAAaqB,GAAb,GAAmBV,MAAM,CAACC,YAAP,CAAoB,UAApB,CAAnB,CAhBO;;EAmBP,YAAIO,OAAO,KAAK,MAAZ,IAAsBC,UAA1B,EAAsC;EAClC;EACAL,UAAAA,MAAM,CAACpK,IAAP,CAAY,gBAAZ,EAA8B,YAAM;EAChCoK,YAAAA,MAAM,CAACE,WAAP,GAAqBA,WAArB,CADgC;;EAIhC,gBAAI,CAACC,MAAL,EAAa;EACTH,cAAAA,MAAM,CAACO,IAAP;EACH;EACJ,WAPD,EAFkC;;EAYlCP,UAAAA,MAAM,CAACf,KAAP,CAAauB,IAAb;EACH,SAhCM;;;EAmCPxK,QAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,eAAxC,EAAyD,KAAzD,EAAgE;EAC5DwB,UAAAA,OAAO,EAAEhQ;EADmD,SAAhE;EAGH;EA/C0C,KAA/C;EAiDH,GA9ES;EAgFV;EACA;EACAiQ,EAAAA,cAlFU,4BAkFO;EACb,QAAI,CAAC,KAAK1B,OAAV,EAAmB;EACf;EACH,KAHY;;;EAMbpG,IAAAA,aAAa,CAAC6G,KAAK,CAACC,UAAN,CAAiBhK,IAAjB,CAAsB,IAAtB,CAAD,CAAb,CANa;EASb;EACA;;EACA,SAAKuJ,KAAL,CAAW7G,YAAX,CAAwB,KAAxB,EAA+B,KAAKiE,MAAL,CAAYsE,UAA3C,EAXa;EAcb;EACA;;EACA,SAAK1B,KAAL,CAAWuB,IAAX,GAhBa;;EAmBb,SAAKI,KAAL,CAAWC,GAAX,CAAe,4BAAf;EACH;EAtGS,CAAd;;ECRA;AACA;AAMA,EAAO,SAASC,MAAT,CAAgBnN,KAAhB,EAAuB;EAC1B,MAAI,CAACuB,EAAE,CAACvB,KAAH,CAASA,KAAT,CAAL,EAAsB;EAClB,WAAOA,KAAP;EACH;;EAED,SAAOA,KAAK,CAACsE,MAAN,CAAa,UAACzB,IAAD,EAAOa,KAAP;EAAA,WAAiB1D,KAAK,CAACoN,OAAN,CAAcvK,IAAd,MAAwBa,KAAzC;EAAA,GAAb,CAAP;EACH;;AAGD,EAAO,SAAS2J,OAAT,CAAiBrN,KAAjB,EAAwBuE,KAAxB,EAA+B;EAClC,MAAI,CAAChD,EAAE,CAACvB,KAAH,CAASA,KAAT,CAAD,IAAoB,CAACA,KAAK,CAACb,MAA/B,EAAuC;EACnC,WAAO,IAAP;EACH;;EAED,SAAOa,KAAK,CAACsN,MAAN,CAAa,UAACC,IAAD,EAAOC,IAAP;EAAA,WAAiBC,IAAI,CAACC,GAAL,CAASF,IAAI,GAAGjJ,KAAhB,IAAyBkJ,IAAI,CAACC,GAAL,CAASH,IAAI,GAAGhJ,KAAhB,CAAzB,GAAkDiJ,IAAlD,GAAyDD,IAA1E;EAAA,GAAb,CAAP;EACH;;ECfM,SAASI,SAAT,CAAmB/N,MAAnB,EAA2B;EAC9B,SAAOgO,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAelO,MAAf,CAAX,CAAP;EACH;;AAGD,EAAO,SAASmO,OAAT,CAAiBnO,MAAjB,EAAyBoO,IAAzB,EAA+B;EAClC,SAAOA,IAAI,CAACvM,KAAL,CAAW,GAAX,EAAgB6L,MAAhB,CAAuB,UAACW,GAAD,EAAMzJ,GAAN;EAAA,WAAcyJ,GAAG,IAAIA,GAAG,CAACzJ,GAAD,CAAxB;EAAA,GAAvB,EAAsD5E,MAAtD,CAAP;EACH;;AAGD,EAAO,SAASwM,MAAT,GAAyC;EAAA,MAAzBrH,MAAyB,uEAAhB,EAAgB;;EAAA,oCAATiH,OAAS;EAATA,IAAAA,OAAS;EAAA;;EAC5C,MAAI,CAACA,OAAO,CAAC7M,MAAb,EAAqB;EACjB,WAAO4F,MAAP;EACH;;EAED,MAAMkH,MAAM,GAAGD,OAAO,CAACkC,KAAR,EAAf;;EAEA,MAAI,CAAC3M,EAAE,CAAC3B,MAAH,CAAUqM,MAAV,CAAL,EAAwB;EACpB,WAAOlH,MAAP;EACH;;EAED3H,EAAAA,MAAM,CAACgC,IAAP,CAAY6M,MAAZ,EAAoBvK,OAApB,CAA4B,UAAA8C,GAAG,EAAI;EAC/B,QAAIjD,EAAE,CAAC3B,MAAH,CAAUqM,MAAM,CAACzH,GAAD,CAAhB,CAAJ,EAA4B;EACxB,UAAI,CAACpH,MAAM,CAACgC,IAAP,CAAY2F,MAAZ,EAAoBwC,QAApB,CAA6B/C,GAA7B,CAAL,EAAwC;EACpCpH,QAAAA,MAAM,CAACqF,MAAP,CAAcsC,MAAd,sBAAyBP,GAAzB,EAA+B,EAA/B;EACH;;EAED4H,MAAAA,MAAM,CAACrH,MAAM,CAACP,GAAD,CAAP,EAAcyH,MAAM,CAACzH,GAAD,CAApB,CAAN;EACH,KAND,MAMO;EACHpH,MAAAA,MAAM,CAACqF,MAAP,CAAcsC,MAAd,sBAAyBP,GAAzB,EAA+ByH,MAAM,CAACzH,GAAD,CAArC;EACH;EACJ,GAVD;EAYA,SAAO4H,MAAM,MAAN,UAAOrH,MAAP,SAAkBiH,OAAlB,EAAP;EACH;;ECzCD;AACA;AAMA,EAAO,SAASmC,UAAT,CAAoBC,MAApB,EAA4B;EAC/B,mBAAUA,MAAV,cAAoBX,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACa,MAAL,KAAgB,KAA3B,CAApB;EACH;;AAGD,EAAO,SAASC,MAAT,CAAgBzR,KAAhB,EAAgC;EAAA,oCAANqF,IAAM;EAANA,IAAAA,IAAM;EAAA;;EACnC,MAAIZ,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAJ,EAAqB;EACjB,WAAOA,KAAP;EACH;;EAED,SAAOA,KAAK,CAAC0R,QAAN,GAAiBtI,OAAjB,CAAyB,UAAzB,EAAqC,UAACmB,KAAD,EAAQoH,CAAR;EAAA,WAActM,IAAI,CAACsM,CAAD,CAAJ,CAAQD,QAAR,EAAd;EAAA,GAArC,CAAP;EACH;;AAGD,EAAO,SAASE,aAAT,CAAuBC,OAAvB,EAAgCC,GAAhC,EAAqC;EACxC,MAAID,OAAO,KAAK,CAAZ,IAAiBC,GAAG,KAAK,CAAzB,IAA8BtR,MAAM,CAACC,KAAP,CAAaoR,OAAb,CAA9B,IAAuDrR,MAAM,CAACC,KAAP,CAAaqR,GAAb,CAA3D,EAA8E;EAC1E,WAAO,CAAP;EACH;;EAED,SAAO,CAAED,OAAO,GAAGC,GAAX,GAAkB,GAAnB,EAAwBC,OAAxB,CAAgC,CAAhC,CAAP;EACH;;AAGD,EAAO,SAASC,UAAT,GAAyD;EAAA,MAArChS,KAAqC,uEAA7B,EAA6B;EAAA,MAAzBmM,IAAyB,uEAAlB,EAAkB;EAAA,MAAd/C,OAAc,uEAAJ,EAAI;EAC5D,SAAOpJ,KAAK,CAACoJ,OAAN,CACH,IAAI6I,MAAJ,CAAW9F,IAAI,CAACuF,QAAL,GAAgBtI,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CADG,EAEHA,OAAO,CAACsI,QAAR,EAFG,CAAP;EAIH;;AAGD,EAAO,SAASQ,WAAT,GAAiC;EAAA,MAAZlS,KAAY,uEAAJ,EAAI;EACpC,SAAOA,KAAK,CAAC0R,QAAN,GAAiBtI,OAAjB,CAAyB,QAAzB,EAAmC,UAAAvB,IAAI;EAAA,WAAIA,IAAI,CAAC2B,MAAL,CAAY,CAAZ,EAAe2I,WAAf,KAA+BtK,IAAI,CAACuK,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAnC;EAAA,GAAvC,CAAP;EACH;;AAGD,EAAO,SAASC,YAAT,GAAkC;EAAA,MAAZtS,KAAY,uEAAJ,EAAI;EACrC,MAAIyC,MAAM,GAAGzC,KAAK,CAAC0R,QAAN,EAAb,CADqC;;EAIrCjP,EAAAA,MAAM,GAAGuP,UAAU,CAACvP,MAAD,EAAS,GAAT,EAAc,GAAd,CAAnB,CAJqC;;EAOrCA,EAAAA,MAAM,GAAGuP,UAAU,CAACvP,MAAD,EAAS,GAAT,EAAc,GAAd,CAAnB,CAPqC;;EAUrCA,EAAAA,MAAM,GAAGyP,WAAW,CAACzP,MAAD,CAApB,CAVqC;;EAarC,SAAOuP,UAAU,CAACvP,MAAD,EAAS,GAAT,EAAc,EAAd,CAAjB;EACH;;AAGD,EAAO,SAAS8P,WAAT,GAAiC;EAAA,MAAZvS,KAAY,uEAAJ,EAAI;EACpC,MAAIyC,MAAM,GAAGzC,KAAK,CAAC0R,QAAN,EAAb,CADoC;;EAIpCjP,EAAAA,MAAM,GAAG6P,YAAY,CAAC7P,MAAD,CAArB,CAJoC;;EAOpC,SAAOA,MAAM,CAAC+G,MAAP,CAAc,CAAd,EAAiB6I,WAAjB,KAAiC5P,MAAM,CAAC+P,KAAP,CAAa,CAAb,CAAxC;EACH;;AAGD,EAAO,SAASC,SAAT,CAAmBtD,MAAnB,EAA2B;EAC9B,MAAMuD,QAAQ,GAAG5K,QAAQ,CAAC6K,sBAAT,EAAjB;EACA,MAAMtP,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAhB;EACA8K,EAAAA,QAAQ,CAACvL,WAAT,CAAqB9D,OAArB;EACAA,EAAAA,OAAO,CAACuP,SAAR,GAAoBzD,MAApB;EACA,SAAOuD,QAAQ,CAACG,UAAT,CAAoB9K,SAA3B;EACH;;AAGD,EAAO,SAAS+K,OAAT,CAAiBzP,OAAjB,EAA0B;EAC7B,MAAMmD,OAAO,GAAGsB,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAhB;EACApB,EAAAA,OAAO,CAACW,WAAR,CAAoB9D,OAApB;EACA,SAAOmD,OAAO,CAACoM,SAAf;EACH;;EC3ED,IAAMG,SAAS,GAAG;EACdjF,EAAAA,GAAG,EAAE,KADS;EAEdI,EAAAA,OAAO,EAAE,SAFK;EAGdc,EAAAA,KAAK,EAAE,OAHO;EAIdgE,EAAAA,KAAK,EAAE,OAJO;EAKdC,EAAAA,OAAO,EAAE;EALK,CAAlB;EAQA,IAAMC,IAAI,GAAG;EACTjP,EAAAA,GADS,iBACkB;EAAA,QAAvByD,GAAuB,uEAAjB,EAAiB;EAAA,QAAbkE,MAAa,uEAAJ,EAAI;;EACvB,QAAInH,EAAE,CAACb,KAAH,CAAS8D,GAAT,KAAiBjD,EAAE,CAACb,KAAH,CAASgI,MAAT,CAArB,EAAuC;EACnC,aAAO,EAAP;EACH;;EAED,QAAInJ,MAAM,GAAGwO,OAAO,CAACrF,MAAM,CAACsH,IAAR,EAAcxL,GAAd,CAApB;;EAEA,QAAIjD,EAAE,CAACb,KAAH,CAASnB,MAAT,CAAJ,EAAsB;EAClB,UAAInC,MAAM,CAACgC,IAAP,CAAYyQ,SAAZ,EAAuBtI,QAAvB,CAAgC/C,GAAhC,CAAJ,EAA0C;EACtC,eAAOqL,SAAS,CAACrL,GAAD,CAAhB;EACH;;EAED,aAAO,EAAP;EACH;;EAED,QAAM0B,OAAO,GAAG;EACZ,oBAAcwC,MAAM,CAACuH,QADT;EAEZ,iBAAWvH,MAAM,CAACwH;EAFN,KAAhB;EAKA9S,IAAAA,MAAM,CAACiH,OAAP,CAAe6B,OAAf,EAAwBxE,OAAxB,CAAgC,gBAAkB;EAAA;EAAA,UAAhB8C,GAAgB;EAAA,UAAXD,KAAW;;EAC9ChF,MAAAA,MAAM,GAAGuP,UAAU,CAACvP,MAAD,EAASiF,GAAT,EAAcD,KAAd,CAAnB;EACH,KAFD;EAIA,WAAOhF,MAAP;EACH;EA1BQ,CAAb;;MCVM4Q;;;EACF,mBAAY9D,MAAZ,EAAoB;EAAA;;EAChB,SAAK+D,OAAL,GAAe/D,MAAM,CAAC3D,MAAP,CAAc2H,OAAd,CAAsBD,OAArC;EACA,SAAK5L,GAAL,GAAW6H,MAAM,CAAC3D,MAAP,CAAc2H,OAAd,CAAsB7L,GAAjC;EACH;;;;;0BAsBGA,KAAK;EACL,UAAI,CAAC2L,OAAO,CAACvP,SAAT,IAAsB,CAAC,KAAKwP,OAAhC,EAAyC;EACrC,eAAO,IAAP;EACH;;EAED,UAAME,KAAK,GAAG1R,MAAM,CAAC2R,YAAP,CAAoBC,OAApB,CAA4B,KAAKhM,GAAjC,CAAd;;EAEA,UAAIjD,EAAE,CAACb,KAAH,CAAS4P,KAAT,CAAJ,EAAqB;EACjB,eAAO,IAAP;EACH;;EAED,UAAMG,IAAI,GAAG7C,IAAI,CAACC,KAAL,CAAWyC,KAAX,CAAb;EAEA,aAAO/O,EAAE,CAAChC,MAAH,CAAUiF,GAAV,KAAkBA,GAAG,CAACrF,MAAtB,GAA+BsR,IAAI,CAACjM,GAAD,CAAnC,GAA2CiM,IAAlD;EACH;;;0BAEG7Q,QAAQ;EACR;EACA,UAAI,CAACuQ,OAAO,CAACvP,SAAT,IAAsB,CAAC,KAAKwP,OAAhC,EAAyC;EACrC;EACH,OAJO;;;EAOR,UAAI,CAAC7O,EAAE,CAAC3B,MAAH,CAAUA,MAAV,CAAL,EAAwB;EACpB;EACH,OATO;;;EAYR,UAAIyQ,OAAO,GAAG,KAAKtP,GAAL,EAAd,CAZQ;;EAeR,UAAIQ,EAAE,CAACb,KAAH,CAAS2P,OAAT,CAAJ,EAAuB;EACnBA,QAAAA,OAAO,GAAG,EAAV;EACH,OAjBO;;;EAoBRjE,MAAAA,MAAM,CAACiE,OAAD,EAAUzQ,MAAV,CAAN,CApBQ;;EAuBRhB,MAAAA,MAAM,CAAC2R,YAAP,CAAoBG,OAApB,CAA4B,KAAKlM,GAAjC,EAAsCoJ,IAAI,CAACE,SAAL,CAAeuC,OAAf,CAAtC;EACH;;;0BA3DsB;EACnB,UAAI;EACA,YAAI,EAAE,kBAAkBzR,MAApB,CAAJ,EAAiC;EAC7B,iBAAO,KAAP;EACH;;EAED,YAAM+K,IAAI,GAAG,SAAb,CALA;EAQA;;EACA/K,QAAAA,MAAM,CAAC2R,YAAP,CAAoBG,OAApB,CAA4B/G,IAA5B,EAAkCA,IAAlC;EACA/K,QAAAA,MAAM,CAAC2R,YAAP,CAAoBI,UAApB,CAA+BhH,IAA/B;EAEA,eAAO,IAAP;EACH,OAbD,CAaE,OAAOjK,CAAP,EAAU;EACR,eAAO,KAAP;EACH;EACJ;;;;;;EC/BL;EACA;EACA;EACA;AAEA,EAAe,SAASkR,KAAT,CAAenQ,GAAf,EAA2C;EAAA,MAAvBoQ,YAAuB,uEAAR,MAAQ;EACtD,SAAO,IAAI9N,OAAJ,CAAY,UAACC,OAAD,EAAU8N,MAAV,EAAqB;EACpC,QAAI;EACA,UAAMC,OAAO,GAAG,IAAIC,cAAJ,EAAhB,CADA;;EAIA,UAAI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;EACjC;EACH;;EAEDA,MAAAA,OAAO,CAAC/P,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;EACnC,YAAI6P,YAAY,KAAK,MAArB,EAA6B;EACzB,cAAI;EACA7N,YAAAA,OAAO,CAAC4K,IAAI,CAACC,KAAL,CAAWkD,OAAO,CAACE,YAAnB,CAAD,CAAP;EACH,WAFD,CAEE,OAAOvR,CAAP,EAAU;EACRsD,YAAAA,OAAO,CAAC+N,OAAO,CAACE,YAAT,CAAP;EACH;EACJ,SAND,MAMO;EACHjO,UAAAA,OAAO,CAAC+N,OAAO,CAACG,QAAT,CAAP;EACH;EACJ,OAVD;EAYAH,MAAAA,OAAO,CAAC/P,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;EACpC,cAAM,IAAImQ,KAAJ,CAAUJ,OAAO,CAACK,MAAlB,CAAN;EACH,OAFD;EAIAL,MAAAA,OAAO,CAACM,IAAR,CAAa,KAAb,EAAoB5Q,GAApB,EAAyB,IAAzB,EAxBA;;EA2BAsQ,MAAAA,OAAO,CAACF,YAAR,GAAuBA,YAAvB;EAEAE,MAAAA,OAAO,CAACO,IAAR;EACH,KA9BD,CA8BE,OAAO5R,CAAP,EAAU;EACRoR,MAAAA,MAAM,CAACpR,CAAD,CAAN;EACH;EACJ,GAlCM,CAAP;EAmCH;;ECzCD;AACA;AAQA,EAAe,SAAS6R,UAAT,CAAoB9Q,GAApB,EAAyB+F,EAAzB,EAA6B;EACxC,MAAI,CAACjF,EAAE,CAAChC,MAAH,CAAUkB,GAAV,CAAL,EAAqB;EACjB;EACH;;EAED,MAAM2N,MAAM,GAAG,OAAf;EACA,MAAMoD,KAAK,GAAGjQ,EAAE,CAAChC,MAAH,CAAUiH,EAAV,CAAd;EACA,MAAIiL,QAAQ,GAAG,KAAf;;EAEA,MAAMC,MAAM,GAAG,SAATA,MAAS;EAAA,WAAM9M,QAAQ,CAAC+M,cAAT,CAAwBnL,EAAxB,MAAgC,IAAtC;EAAA,GAAf;;EAEA,MAAMoL,MAAM,GAAG,SAATA,MAAS,CAACzO,SAAD,EAAY0O,IAAZ,EAAqB;EAChC1O,IAAAA,SAAS,CAACuM,SAAV,GAAsBmC,IAAtB,CADgC;;EAIhC,QAAIL,KAAK,IAAIE,MAAM,EAAnB,EAAuB;EACnB;EACH,KAN+B;;;EAShC9M,IAAAA,QAAQ,CAACkN,IAAT,CAAcC,qBAAd,CAAoC,YAApC,EAAkD5O,SAAlD;EACH,GAVD,CAXwC;;;EAwBxC,MAAI,CAACqO,KAAD,IAAU,CAACE,MAAM,EAArB,EAAyB;EACrB,QAAMM,UAAU,GAAG7B,OAAO,CAACvP,SAA3B,CADqB;;EAIrB,QAAMuC,SAAS,GAAGyB,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAlB;EACAvB,IAAAA,SAAS,CAACsB,YAAV,CAAuB,QAAvB,EAAiC,EAAjC;;EAEA,QAAI+M,KAAJ,EAAW;EACPrO,MAAAA,SAAS,CAACsB,YAAV,CAAuB,IAAvB,EAA6B+B,EAA7B;EACH,KAToB;;;EAYrB,QAAIwL,UAAJ,EAAgB;EACZ,UAAMC,MAAM,GAAGrT,MAAM,CAAC2R,YAAP,CAAoBC,OAApB,WAA+BpC,MAA/B,cAAyC5H,EAAzC,EAAf;EACAiL,MAAAA,QAAQ,GAAGQ,MAAM,KAAK,IAAtB;;EAEA,UAAIR,QAAJ,EAAc;EACV,YAAMI,IAAI,GAAGjE,IAAI,CAACC,KAAL,CAAWoE,MAAX,CAAb;EACAL,QAAAA,MAAM,CAACzO,SAAD,EAAY0O,IAAI,CAACK,OAAjB,CAAN;EACH;EACJ,KApBoB;;;EAuBrBtB,IAAAA,KAAK,CAACnQ,GAAD,CAAL,CACK2C,IADL,CACU,UAAA+O,MAAM,EAAI;EACZ,UAAI5Q,EAAE,CAACb,KAAH,CAASyR,MAAT,CAAJ,EAAsB;EAClB;EACH;;EAED,UAAIH,UAAJ,EAAgB;EACZpT,QAAAA,MAAM,CAAC2R,YAAP,CAAoBG,OAApB,WACOtC,MADP,cACiB5H,EADjB,GAEIoH,IAAI,CAACE,SAAL,CAAe;EACXoE,UAAAA,OAAO,EAAEC;EADE,SAAf,CAFJ;EAMH;;EAEDP,MAAAA,MAAM,CAACzO,SAAD,EAAYgP,MAAZ,CAAN;EACH,KAhBL,EAiBKC,KAjBL,CAiBW,YAAM,EAjBjB;EAkBH;EACJ;;EC3ED;AACA;AAMA,EAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAA9N,KAAK;EAAA,SAAI+N,QAAQ,CAAE/N,KAAK,GAAG,EAAR,GAAa,EAAd,GAAoB,EAArB,EAAyB,EAAzB,CAAZ;EAAA,CAAtB;AACP,EAAO,IAAMgO,UAAU,GAAG,SAAbA,UAAa,CAAAhO,KAAK;EAAA,SAAI+N,QAAQ,CAAE/N,KAAK,GAAG,EAAT,GAAe,EAAhB,EAAoB,EAApB,CAAZ;EAAA,CAAxB;AACP,EAAO,IAAMiO,UAAU,GAAG,SAAbA,UAAa,CAAAjO,KAAK;EAAA,SAAI+N,QAAQ,CAAC/N,KAAK,GAAG,EAAT,EAAa,EAAb,CAAZ;EAAA,CAAxB;;AAGP,EAAO,SAASkO,UAAT,GAAsE;EAAA,MAAlDC,IAAkD,uEAA3C,CAA2C;EAAA,MAAxCC,YAAwC,uEAAzB,KAAyB;EAAA,MAAlBC,QAAkB,uEAAP,KAAO;;EACzE;EACA,MAAI,CAACrR,EAAE,CAAC1B,MAAH,CAAU6S,IAAV,CAAL,EAAsB;EAClB,WAAOD,UAAU,CAAC,IAAD,EAAOE,YAAP,EAAqBC,QAArB,CAAjB;EACH,GAJwE;;;EAOzE,MAAMrE,MAAM,GAAG,SAATA,MAAS,CAAAhK,KAAK;EAAA,WAAI,WAAIA,KAAJ,EAAY+K,KAAZ,CAAkB,CAAC,CAAnB,CAAJ;EAAA,GAApB,CAPyE;;;EAUzE,MAAIuD,KAAK,GAAGR,QAAQ,CAACK,IAAD,CAApB;EACA,MAAMI,IAAI,GAAGP,UAAU,CAACG,IAAD,CAAvB;EACA,MAAMK,IAAI,GAAGP,UAAU,CAACE,IAAD,CAAvB,CAZyE;;EAezE,MAAIC,YAAY,IAAIE,KAAK,GAAG,CAA5B,EAA+B;EAC3BA,IAAAA,KAAK,aAAMA,KAAN,MAAL;EACH,GAFD,MAEO;EACHA,IAAAA,KAAK,GAAG,EAAR;EACH,GAnBwE;;;EAsBzE,mBAAUD,QAAQ,IAAIF,IAAI,GAAG,CAAnB,GAAuB,GAAvB,GAA6B,EAAvC,SAA4CG,KAA5C,SAAoDtE,MAAM,CAACuE,IAAD,CAA1D,cAAoEvE,MAAM,CAACwE,IAAD,CAA1E;EACH;;ECdD,IAAMC,QAAQ,GAAG;EACb;EACAC,EAAAA,UAFa,wBAEA;EACT,QAAMxS,GAAG,GAAG,IAAInB,GAAJ,CAAQ,KAAKoJ,MAAL,CAAYwK,OAApB,EAA6BtU,MAAM,CAACuU,QAApC,CAAZ;EACA,QAAMC,IAAI,GAAG3S,GAAG,CAAC4S,IAAJ,KAAazU,MAAM,CAACuU,QAAP,CAAgBE,IAA7B,IAAsC/J,OAAO,CAACC,IAAR,IAAgB,CAAC3K,MAAM,CAAC0U,aAA3E;EAEA,WAAO;EACH7S,MAAAA,GAAG,EAAE,KAAKiI,MAAL,CAAYwK,OADd;EAEHE,MAAAA,IAAI,EAAJA;EAFG,KAAP;EAIH,GAVY;EAYb;EACAG,EAAAA,YAba,0BAaE;EACX,QAAI;EACA,WAAKrQ,QAAL,CAAc8P,QAAd,GAAyBtL,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBR,QAAtB,CAA+B1P,OAArD,CAAzB,CADA;;EAIA,WAAKJ,QAAL,CAAcuQ,OAAd,GAAwB;EACpB7G,QAAAA,IAAI,EAAEnF,WAAW,CAAC1F,IAAZ,CAAiB,IAAjB,EAAuB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8B7G,IAArD,CADc;EAEpB8G,QAAAA,KAAK,EAAEhM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BC,KAApD,CAFa;EAGpBC,QAAAA,OAAO,EAAEjM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BE,OAApD,CAHW;EAIpBC,QAAAA,MAAM,EAAElM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BG,MAApD,CAJY;EAKpBC,QAAAA,WAAW,EAAEnM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BI,WAApD,CALO;EAMpBC,QAAAA,IAAI,EAAEpM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BK,IAApD,CANc;EAOpBlJ,QAAAA,GAAG,EAAElD,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8B7I,GAApD,CAPe;EAQpBI,QAAAA,OAAO,EAAEtD,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BzI,OAApD,CARW;EASpB+I,QAAAA,QAAQ,EAAErM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BM,QAApD,CATU;EAUpBC,QAAAA,QAAQ,EAAEtM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BO,QAApD,CAVU;EAWpBC,QAAAA,UAAU,EAAEvM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BQ,UAApD;EAXQ,OAAxB,CAJA;;EAmBA,WAAK/Q,QAAL,CAAcgR,QAAd,GAAyBxM,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBU,QAA5C,CAAzB,CAnBA;;EAsBA,WAAKhR,QAAL,CAAciR,MAAd,GAAuB;EACnBC,QAAAA,IAAI,EAAE1M,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BC,IAAnD,CADa;EAEnBC,QAAAA,MAAM,EAAE3M,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BE,MAAnD;EAFW,OAAvB,CAtBA;;EA4BA,WAAKnR,QAAL,CAAcoR,OAAd,GAAwB;EACpBC,QAAAA,MAAM,EAAE7M,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBc,OAAtB,CAA8BC,MAApD,CADY;EAEpBhI,QAAAA,WAAW,EAAE7E,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBc,OAAtB,CAA8B/H,WAApD,CAFO;EAGpBiI,QAAAA,QAAQ,EAAE9M,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,KAAK2G,MAAL,CAAY8K,SAAZ,CAAsBc,OAAtB,CAA8BE,QAApD;EAHU,OAAxB,CA5BA;;EAmCA,UAAIjT,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcgR,QAAzB,CAAJ,EAAwC;EACpC,aAAKhR,QAAL,CAAcoR,OAAd,CAAsBG,WAAtB,GAAoC,KAAKvR,QAAL,CAAcgR,QAAd,CAAuBvM,aAAvB,YAC5B,KAAKe,MAAL,CAAYC,UAAZ,CAAuB+L,OADK,EAApC;EAGH;;EAED,aAAO,IAAP;EACH,KA1CD,CA0CE,OAAOC,KAAP,EAAc;EACZ;EACA,WAAK1H,KAAL,CAAW2H,IAAX,CAAgB,iEAAhB,EAAmFD,KAAnF,EAFY;;EAKZ,WAAKE,oBAAL,CAA0B,IAA1B;EAEA,aAAO,KAAP;EACH;EACJ,GAjEY;EAmEb;EACAC,EAAAA,UApEa,sBAoEFnT,IApEE,EAoEIyC,UApEJ,EAoEgB;EACzB,QAAM2Q,SAAS,GAAG,4BAAlB;EACA,QAAM7B,OAAO,GAAGF,QAAQ,CAACC,UAAT,CAAoBlR,IAApB,CAAyB,IAAzB,CAAhB;EACA,QAAMiT,QAAQ,aAAM,CAAC9B,OAAO,CAACE,IAAT,GAAgBF,OAAO,CAACzS,GAAxB,GAA8B,EAApC,cAA0C,KAAKiI,MAAL,CAAYuM,UAAtD,CAAd,CAHyB;;EAMzB,QAAMC,IAAI,GAAGtQ,QAAQ,CAACuQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAb;EACA5Q,IAAAA,aAAa,CACT+Q,IADS,EAET9I,MAAM,CAAChI,UAAD,EAAa;EACfgR,MAAAA,IAAI,EAAE,cADS;EAEfvN,MAAAA,SAAS,EAAE;EAFI,KAAb,CAFG,CAAb,CAPyB;;EAgBzB,QAAMwN,GAAG,GAAGzQ,QAAQ,CAACuQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAZ;EACA,QAAM/G,IAAI,aAAMgH,QAAN,cAAkBrT,IAAlB,CAAV,CAjByB;EAoBzB;EACA;;EACA,QAAI,UAAU0T,GAAd,EAAmB;EACfA,MAAAA,GAAG,CAACC,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2DtH,IAA3D;EACH,KAxBwB;;;EA2BzBqH,IAAAA,GAAG,CAACC,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiEtH,IAAjE,EA3ByB;;EA8BzBkH,IAAAA,IAAI,CAACjR,WAAL,CAAiBoR,GAAjB;EAEA,WAAOH,IAAP;EACH,GArGY;EAuGb;EACAK,EAAAA,WAxGa,uBAwGD/Q,GAxGC,EAwGe;EAAA,QAAXgR,IAAW,uEAAJ,EAAI;EACxB,QAAM7Q,IAAI,GAAGqL,IAAI,CAACjP,GAAL,CAASyD,GAAT,EAAc,KAAKkE,MAAnB,CAAb;EAEA,QAAMtE,UAAU,GAAGhH,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkB+S,IAAlB,EAAwB;EACvCjP,MAAAA,KAAK,EAAE,CAACiP,IAAI,CAACjP,KAAN,EAAa,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBjC,MAApC,EAA4CpC,MAA5C,CAAmDrH,OAAnD,EAA4DwY,IAA5D,CAAiE,GAAjE;EADgC,KAAxB,CAAnB;EAIA,WAAO/Q,aAAa,CAAC,MAAD,EAASN,UAAT,EAAqBO,IAArB,CAApB;EACH,GAhHY;EAkHb;EACA+Q,EAAAA,WAnHa,uBAmHD/Q,IAnHC,EAmHK;EACd,QAAIpD,EAAE,CAACb,KAAH,CAASiE,IAAT,CAAJ,EAAoB;EAChB,aAAO,IAAP;EACH;;EAED,QAAMgR,KAAK,GAAGjR,aAAa,CAAC,MAAD,EAAS;EAChC6B,MAAAA,KAAK,EAAE,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBiN,IAAvB,CAA4BrR;EADH,KAAT,CAA3B;EAIAoR,IAAAA,KAAK,CAAC1R,WAAN,CACIS,aAAa,CACT,MADS,EAET;EACI6B,MAAAA,KAAK,EAAE,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBiN,IAAvB,CAA4BD;EADvC,KAFS,EAKThR,IALS,CADjB;EAUA,WAAOgR,KAAP;EACH,GAvIY;EAyIb;EACAE,EAAAA,YA1Ia,wBA0IAC,UA1IA,EA0IYN,IA1IZ,EA0IkB;EAC3B,QAAMpR,UAAU,GAAGhH,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkB+S,IAAlB,CAAnB;EACA,QAAI7T,IAAI,GAAG0N,WAAW,CAACyG,UAAD,CAAtB;EAEA,QAAMC,KAAK,GAAG;EACV5V,MAAAA,OAAO,EAAE,QADC;EAEViB,MAAAA,MAAM,EAAE,KAFE;EAGV4U,MAAAA,KAAK,EAAE,IAHG;EAIVd,MAAAA,IAAI,EAAE,IAJI;EAKVe,MAAAA,YAAY,EAAE,IALJ;EAMVC,MAAAA,WAAW,EAAE;EANH,KAAd;EASA,KAAC,SAAD,EAAY,MAAZ,EAAoB,OAApB,EAA6BxU,OAA7B,CAAqC,UAAA8C,GAAG,EAAI;EACxC,UAAIpH,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBmD,QAAxB,CAAiC/C,GAAjC,CAAJ,EAA2C;EACvCuR,QAAAA,KAAK,CAACvR,GAAD,CAAL,GAAaJ,UAAU,CAACI,GAAD,CAAvB;EACA,eAAOJ,UAAU,CAACI,GAAD,CAAjB;EACH;EACJ,KALD,EAb2B;;EAqB3B,QAAIuR,KAAK,CAAC5V,OAAN,KAAkB,QAAlB,IAA8B,CAAC/C,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBmD,QAAxB,CAAiC,MAAjC,CAAnC,EAA6E;EACzEnD,MAAAA,UAAU,CAACzC,IAAX,GAAkB,QAAlB;EACH,KAvB0B;;;EA0B3B,QAAIvE,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBmD,QAAxB,CAAiC,OAAjC,CAAJ,EAA+C;EAC3C,UAAI,CAACnD,UAAU,CAACmC,KAAX,CAAiBgB,QAAjB,CAA0B,KAAKmB,MAAL,CAAYC,UAAZ,CAAuBwN,OAAjD,CAAL,EAAgE;EAC5D/R,QAAAA,UAAU,CAACmC,KAAX,eAAwB,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA/C;EACH;EACJ,KAJD,MAIO;EACH/R,MAAAA,UAAU,CAACmC,KAAX,GAAmB,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA1C;EACH,KAhC0B;;;EAmC3B,YAAQL,UAAR;EACI,WAAK,MAAL;EACIC,QAAAA,KAAK,CAAC3U,MAAN,GAAe,IAAf;EACA2U,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,OAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,MAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,OAApB;EACA;;EAEJ,WAAK,MAAL;EACIH,QAAAA,KAAK,CAAC3U,MAAN,GAAe,IAAf;EACA2U,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,QAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,QAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,OAApB;EACA;;EAEJ,WAAK,UAAL;EACIH,QAAAA,KAAK,CAAC3U,MAAN,GAAe,IAAf;EACA2U,QAAAA,KAAK,CAACC,KAAN,GAAc,gBAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,iBAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,cAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,aAApB;EACA;;EAEJ,WAAK,YAAL;EACIH,QAAAA,KAAK,CAAC3U,MAAN,GAAe,IAAf;EACA2U,QAAAA,KAAK,CAACC,KAAN,GAAc,iBAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,gBAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,kBAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,iBAApB;EACA;;EAEJ,WAAK,YAAL;EACI9R,QAAAA,UAAU,CAACmC,KAAX,eAAwB,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA/C;EACAxU,QAAAA,IAAI,GAAG,MAAP;EACAoU,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACb,IAAN,GAAa,MAAb;EACA;;EAEJ;EACI,YAAI3T,EAAE,CAACb,KAAH,CAASqV,KAAK,CAACC,KAAf,CAAJ,EAA2B;EACvBD,UAAAA,KAAK,CAACC,KAAN,GAAcrU,IAAd;EACH;;EACD,YAAIJ,EAAE,CAACb,KAAH,CAASqV,KAAK,CAACb,IAAf,CAAJ,EAA0B;EACtBa,UAAAA,KAAK,CAACb,IAAN,GAAaY,UAAb;EACH;;EA9CT;;EAiDA,QAAMM,MAAM,GAAG1R,aAAa,CAACqR,KAAK,CAAC5V,OAAP,CAA5B,CApF2B;;EAuF3B,QAAI4V,KAAK,CAAC3U,MAAV,EAAkB;EACd;EACAgV,MAAAA,MAAM,CAACnS,WAAP,CACI+O,QAAQ,CAAC8B,UAAT,CAAoB/S,IAApB,CAAyB,IAAzB,EAA+BgU,KAAK,CAACG,WAArC,EAAkD;EAC9C3P,QAAAA,KAAK,EAAE;EADuC,OAAlD,CADJ;EAKA6P,MAAAA,MAAM,CAACnS,WAAP,CACI+O,QAAQ,CAAC8B,UAAT,CAAoB/S,IAApB,CAAyB,IAAzB,EAA+BgU,KAAK,CAACb,IAArC,EAA2C;EACvC3O,QAAAA,KAAK,EAAE;EADgC,OAA3C,CADJ,EAPc;;EAcd6P,MAAAA,MAAM,CAACnS,WAAP,CACI+O,QAAQ,CAACuC,WAAT,CAAqBxT,IAArB,CAA0B,IAA1B,EAAgCgU,KAAK,CAACE,YAAtC,EAAoD;EAChD1P,QAAAA,KAAK,EAAE;EADyC,OAApD,CADJ;EAKA6P,MAAAA,MAAM,CAACnS,WAAP,CACI+O,QAAQ,CAACuC,WAAT,CAAqBxT,IAArB,CAA0B,IAA1B,EAAgCgU,KAAK,CAACC,KAAtC,EAA6C;EACzCzP,QAAAA,KAAK,EAAE;EADkC,OAA7C,CADJ;EAKH,KAxBD,MAwBO;EACH6P,MAAAA,MAAM,CAACnS,WAAP,CAAmB+O,QAAQ,CAAC8B,UAAT,CAAoB/S,IAApB,CAAyB,IAAzB,EAA+BgU,KAAK,CAACb,IAArC,CAAnB;EACAkB,MAAAA,MAAM,CAACnS,WAAP,CAAmB+O,QAAQ,CAACuC,WAAT,CAAqBxT,IAArB,CAA0B,IAA1B,EAAgCgU,KAAK,CAACC,KAAtC,CAAnB;EACH,KAlH0B;;;EAqH3B5J,IAAAA,MAAM,CAAChI,UAAD,EAAasB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8B9R,IAA9B,CAAD,EAAsCyC,UAAtC,CAAtC,CAAN;EACAD,IAAAA,aAAa,CAACiS,MAAD,EAAShS,UAAT,CAAb,CAtH2B;;EAyH3B,QAAIzC,IAAI,KAAK,MAAb,EAAqB;EACjB,UAAI,CAACJ,EAAE,CAACvB,KAAH,CAAS,KAAKkD,QAAL,CAAcuQ,OAAd,CAAsB9R,IAAtB,CAAT,CAAL,EAA4C;EACxC,aAAKuB,QAAL,CAAcuQ,OAAd,CAAsB9R,IAAtB,IAA8B,EAA9B;EACH;;EAED,WAAKuB,QAAL,CAAcuQ,OAAd,CAAsB9R,IAAtB,EAA4BE,IAA5B,CAAiCuU,MAAjC;EACH,KAND,MAMO;EACH,WAAKlT,QAAL,CAAcuQ,OAAd,CAAsB9R,IAAtB,IAA8ByU,MAA9B;EACH;;EAED,WAAOA,MAAP;EACH,GA9QY;EAgRb;EACAC,EAAAA,WAjRa,uBAiRD1U,IAjRC,EAiRKyC,UAjRL,EAiRiB;EAC1B;EACA,QAAMtH,KAAK,GAAG4H,aAAa,CACvB,OADuB,EAEvB0H,MAAM,CACF1G,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BxS,IAA7B,CAAD,CADvB,EAEF;EACIA,MAAAA,IAAI,EAAE,OADV;EAEI2U,MAAAA,GAAG,EAAE,CAFT;EAGI1H,MAAAA,GAAG,EAAE,GAHT;EAII2H,MAAAA,IAAI,EAAE,IAJV;EAKIhS,MAAAA,KAAK,EAAE,CALX;EAMIiS,MAAAA,YAAY,EAAE,KANlB;EAOI;EACApB,MAAAA,IAAI,EAAE,QARV;EASI,oBAAcpF,IAAI,CAACjP,GAAL,CAASY,IAAT,EAAe,KAAK+G,MAApB,CATlB;EAUI,uBAAiB,CAVrB;EAWI,uBAAiB,GAXrB;EAYI,uBAAiB;EAZrB,KAFE,EAgBFtE,UAhBE,CAFiB,CAA3B;EAsBA,SAAKlB,QAAL,CAAciR,MAAd,CAAqBxS,IAArB,IAA6B7E,KAA7B,CAxB0B;;EA2B1BkW,IAAAA,QAAQ,CAACyD,eAAT,CAAyB1U,IAAzB,CAA8B,IAA9B,EAAoCjF,KAApC;EAEA,WAAOA,KAAP;EACH,GA/SY;EAiTb;EACA4Z,EAAAA,cAlTa,0BAkTE/U,IAlTF,EAkTQyC,UAlTR,EAkToB;EAC7B,QAAM8P,QAAQ,GAAGxP,aAAa,CAC1B,UAD0B,EAE1B0H,MAAM,CACF1G,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBc,OAAtB,CAA8B3S,IAA9B,CAAD,CADvB,EAEF;EACI2U,MAAAA,GAAG,EAAE,CADT;EAEI1H,MAAAA,GAAG,EAAE,GAFT;EAGIrK,MAAAA,KAAK,EAAE,CAHX;EAII6Q,MAAAA,IAAI,EAAE,cAJV;EAKI,qBAAe;EALnB,KAFE,EASFhR,UATE,CAFoB,CAA9B,CAD6B;;EAiB7B,QAAIzC,IAAI,KAAK,QAAb,EAAuB;EACnBuS,MAAAA,QAAQ,CAACjQ,WAAT,CAAqBS,aAAa,CAAC,MAAD,EAAS,IAAT,EAAe,GAAf,CAAlC;EAEA,UAAMiS,SAAS,GAAG;EACdC,QAAAA,MAAM,EAAE,QADM;EAEdrC,QAAAA,MAAM,EAAE;EAFM,QAGhB5S,IAHgB,CAAlB;EAIA,UAAMkV,MAAM,GAAGF,SAAS,GAAG3G,IAAI,CAACjP,GAAL,CAAS4V,SAAT,EAAoB,KAAKjO,MAAzB,CAAH,GAAsC,EAA9D;EAEAwL,MAAAA,QAAQ,CAACrP,SAAT,eAA0BgS,MAAM,CAAC1H,WAAP,EAA1B;EACH;;EAED,SAAKjM,QAAL,CAAcoR,OAAd,CAAsB3S,IAAtB,IAA8BuS,QAA9B;EAEA,WAAOA,QAAP;EACH,GAlVY;EAoVb;EACA4C,EAAAA,UArVa,sBAqVFnV,IArVE,EAqVI;EACb,QAAMyC,UAAU,GAAGsB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBc,OAAtB,CAA8B3S,IAA9B,CAAD,CAA5C;EAEA,QAAMwB,SAAS,GAAGuB,aAAa,CAC3B,KAD2B,EAE3B0H,MAAM,CAAChI,UAAD,EAAa;EACfmC,MAAAA,KAAK,EAAE,UAAG,KAAKmC,MAAL,CAAYC,UAAZ,CAAuB2L,OAAvB,CAA+B5B,IAAlC,cAA0CtO,UAAU,CAACmC,KAAX,GAAmBnC,UAAU,CAACmC,KAA9B,GAAsC,EAAhF,EAAqFP,IAArF,EADQ;EAEf,oBAAcgK,IAAI,CAACjP,GAAL,CAASY,IAAT,EAAe,KAAK+G,MAApB;EAFC,KAAb,CAFqB,EAM3B,OAN2B,CAA/B,CAHa;;EAab,SAAKxF,QAAL,CAAcoR,OAAd,CAAsB3S,IAAtB,IAA8BwB,SAA9B;EAEA,WAAOA,SAAP;EACH,GArWY;EAuWb;EACA;EACA;EACA4T,EAAAA,qBA1Wa,iCA0WSC,QA1WT,EA0WmBrV,IA1WnB,EA0WyB;EAAA;;EAClC;EACAG,IAAAA,EAAE,CACEkV,QADF,EAEE,eAFF,EAGE,UAAA3W,KAAK,EAAI;EACL;EACA,UAAI,CAAC,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiBkH,QAAjB,CAA0BlH,KAAK,CAAC4W,KAAhC,CAAL,EAA6C;EACzC;EACH,OAJI;;;EAOL5W,MAAAA,KAAK,CAACiI,cAAN;EACAjI,MAAAA,KAAK,CAAC6W,eAAN,GARK;;EAWL,UAAI7W,KAAK,CAACsB,IAAN,KAAe,SAAnB,EAA8B;EAC1B;EACH;;EAED,UAAMwV,aAAa,GAAG/P,OAAO,CAAC4P,QAAD,EAAW,wBAAX,CAA7B,CAfK;;EAkBL,UAAI,CAACG,aAAD,IAAkB,CAAC,EAAD,EAAK,EAAL,EAAS5P,QAAT,CAAkBlH,KAAK,CAAC4W,KAAxB,CAAtB,EAAsD;EAClDjE,QAAAA,QAAQ,CAACoE,aAAT,CAAuBrV,IAAvB,CAA4B,KAA5B,EAAkCJ,IAAlC,EAAwC,IAAxC;EACH,OAFD,MAEO;EACH,YAAIoD,MAAJ;;EAEA,YAAI1E,KAAK,CAAC4W,KAAN,KAAgB,EAApB,EAAwB;EACpB,cAAI5W,KAAK,CAAC4W,KAAN,KAAgB,EAAhB,IAAuBE,aAAa,IAAI9W,KAAK,CAAC4W,KAAN,KAAgB,EAA5D,EAAiE;EAC7DlS,YAAAA,MAAM,GAAGiS,QAAQ,CAACK,kBAAlB;;EAEA,gBAAI,CAAC9V,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,cAAAA,MAAM,GAAGiS,QAAQ,CAAClT,UAAT,CAAoBwT,iBAA7B;EACH;EACJ,WAND,MAMO;EACHvS,YAAAA,MAAM,GAAGiS,QAAQ,CAACO,sBAAlB;;EAEA,gBAAI,CAAChW,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,cAAAA,MAAM,GAAGiS,QAAQ,CAAClT,UAAT,CAAoB0T,gBAA7B;EACH;EACJ;;EAEDjP,UAAAA,QAAQ,CAACxG,IAAT,CAAc,KAAd,EAAoBgD,MAApB,EAA4B,IAA5B;EACH;EACJ;EACJ,KA5CH,EA6CE,KA7CF,CAAF,CAFkC;EAmDlC;;EACAjD,IAAAA,EAAE,CAACkV,QAAD,EAAW,OAAX,EAAoB,UAAA3W,KAAK,EAAI;EAC3B,UAAIA,KAAK,CAAC4W,KAAN,KAAgB,EAApB,EAAwB;EACpB;EACH;;EAEDjE,MAAAA,QAAQ,CAACyE,kBAAT,CAA4B1V,IAA5B,CAAiC,KAAjC,EAAuC,IAAvC,EAA6C,IAA7C;EACH,KANC,CAAF;EAOH,GAraY;EAuab;EACA2V,EAAAA,cAxaa,gCAwa+D;EAAA;;EAAA,QAA3DnT,KAA2D,QAA3DA,KAA2D;EAAA,QAApDoT,IAAoD,QAApDA,IAAoD;EAAA,QAA9ChW,IAA8C,QAA9CA,IAA8C;EAAA,QAAxCuO,KAAwC,QAAxCA,KAAwC;EAAA,0BAAjCyF,KAAiC;EAAA,QAAjCA,KAAiC,2BAAzB,IAAyB;EAAA,4BAAnBiC,OAAmB;EAAA,QAAnBA,OAAmB,6BAAT,KAAS;EACxE,QAAMxT,UAAU,GAAGsB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BxS,IAA7B,CAAD,CAA5C;EAEA,QAAMqV,QAAQ,GAAGtS,aAAa,CAC1B,QAD0B,EAE1B0H,MAAM,CAAChI,UAAD,EAAa;EACfzC,MAAAA,IAAI,EAAE,QADS;EAEfyT,MAAAA,IAAI,EAAE,eAFS;EAGf7O,MAAAA,KAAK,EAAE,UAAG,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA1B,cAAqC/R,UAAU,CAACmC,KAAX,GAAmBnC,UAAU,CAACmC,KAA9B,GAAsC,EAA3E,EAAgFP,IAAhF,EAHQ;EAIf,sBAAgB4R,OAJD;EAKfrT,MAAAA,KAAK,EAALA;EALe,KAAb,CAFoB,CAA9B;EAWA,QAAMsT,IAAI,GAAGnT,aAAa,CAAC,MAAD,CAA1B,CAdwE;;EAiBxEmT,IAAAA,IAAI,CAACnI,SAAL,GAAiBQ,KAAjB;;EAEA,QAAI3O,EAAE,CAACpB,OAAH,CAAWwV,KAAX,CAAJ,EAAuB;EACnBkC,MAAAA,IAAI,CAAC5T,WAAL,CAAiB0R,KAAjB;EACH;;EAEDqB,IAAAA,QAAQ,CAAC/S,WAAT,CAAqB4T,IAArB,EAvBwE;;EA0BxEza,IAAAA,MAAM,CAAC0D,cAAP,CAAsBkW,QAAtB,EAAgC,SAAhC,EAA2C;EACvCc,MAAAA,UAAU,EAAE,IAD2B;EAEvC/W,MAAAA,GAFuC,iBAEjC;EACF,eAAOiW,QAAQ,CAAC9K,YAAT,CAAsB,cAAtB,MAA0C,MAAjD;EACH,OAJsC;EAKvCI,MAAAA,GALuC,eAKnCsL,OALmC,EAK1B;EACT;EACA,YAAIA,OAAJ,EAAa;EACT9Z,UAAAA,KAAK,CAAC0F,IAAN,CAAWwT,QAAQ,CAAClT,UAAT,CAAoBiU,QAA/B,EACKzT,MADL,CACY,UAAA0T,IAAI;EAAA,mBAAI5Q,OAAO,CAAC4Q,IAAD,EAAO,wBAAP,CAAX;EAAA,WADhB,EAEKtW,OAFL,CAEa,UAAAsW,IAAI;EAAA,mBAAIA,IAAI,CAACvT,YAAL,CAAkB,cAAlB,EAAkC,OAAlC,CAAJ;EAAA,WAFjB;EAGH;;EAEDuS,QAAAA,QAAQ,CAACvS,YAAT,CAAsB,cAAtB,EAAsCmT,OAAO,GAAG,MAAH,GAAY,OAAzD;EACH;EAdsC,KAA3C;EAiBA,SAAKK,SAAL,CAAeC,IAAf,CACIlB,QADJ,EAEI,aAFJ,EAGI,UAAA3W,KAAK,EAAI;EACL,UAAIkB,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,KAA2BA,KAAK,CAAC4W,KAAN,KAAgB,EAA/C,EAAmD;EAC/C;EACH;;EAED5W,MAAAA,KAAK,CAACiI,cAAN;EACAjI,MAAAA,KAAK,CAAC6W,eAAN;EAEAF,MAAAA,QAAQ,CAACY,OAAT,GAAmB,IAAnB;;EAEA,cAAQjW,IAAR;EACI,aAAK,UAAL;EACI,UAAA,MAAI,CAACwW,YAAL,GAAoB7a,MAAM,CAACiH,KAAD,CAA1B;EACA;;EAEJ,aAAK,SAAL;EACI,UAAA,MAAI,CAACuI,OAAL,GAAevI,KAAf;EACA;;EAEJ,aAAK,OAAL;EACI,UAAA,MAAI,CAAC6T,KAAL,GAAaC,UAAU,CAAC9T,KAAD,CAAvB;EACA;;EAEJ;EACI;EAdR;;EAiBAyO,MAAAA,QAAQ,CAACoE,aAAT,CAAuBrV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0CR,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,CAA1C;EACH,KA/BL,EAgCIsB,IAhCJ,EAiCI,KAjCJ;EAoCAqR,IAAAA,QAAQ,CAAC+D,qBAAT,CAA+BhV,IAA/B,CAAoC,IAApC,EAA0CiV,QAA1C,EAAoDrV,IAApD;EAEAgW,IAAAA,IAAI,CAAC1T,WAAL,CAAiB+S,QAAjB;EACH,GA1fY;EA4fb;EACAvE,EAAAA,UA7fa,2BA6f0B;EAAA,QAA5BC,IAA4B,uEAArB,CAAqB;EAAA,QAAlBE,QAAkB,uEAAP,KAAO;;EACnC;EACA,QAAI,CAACrR,EAAE,CAAC1B,MAAH,CAAU6S,IAAV,CAAL,EAAsB;EAClB,aAAOA,IAAP;EACH,KAJkC;;;EAOnC,QAAM4F,UAAU,GAAGjG,QAAQ,CAAC,KAAKmC,QAAN,CAAR,GAA0B,CAA7C;EAEA,WAAO/B,UAAU,CAACC,IAAD,EAAO4F,UAAP,EAAmB1F,QAAnB,CAAjB;EACH,GAvgBY;EAygBb;EACA2F,EAAAA,iBA1gBa,+BA0gBgD;EAAA,QAA3CxT,MAA2C,uEAAlC,IAAkC;EAAA,QAA5B2N,IAA4B,uEAArB,CAAqB;EAAA,QAAlBE,QAAkB,uEAAP,KAAO;;EACzD;EACA,QAAI,CAACrR,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAD,IAAuB,CAACxD,EAAE,CAAC1B,MAAH,CAAU6S,IAAV,CAA5B,EAA6C;EACzC;EACH,KAJwD;;;EAOzD3N,IAAAA,MAAM,CAACF,SAAP,GAAmBmO,QAAQ,CAACP,UAAT,CAAoBC,IAApB,EAA0BE,QAA1B,CAAnB;EACH,GAlhBY;EAohBb;EACA4F,EAAAA,YArhBa,0BAqhBE;EACX,QAAI,CAAC,KAAK5X,SAAL,CAAe8J,EAApB,EAAwB;EACpB;EACH,KAHU;;;EAMX,QAAInJ,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAciR,MAAd,CAAqBE,MAAhC,CAAJ,EAA6C;EACzCrB,MAAAA,QAAQ,CAACyF,QAAT,CAAkB1W,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAciR,MAAd,CAAqBE,MAAlD,EAA0D,KAAKqE,KAAL,GAAa,CAAb,GAAiB,KAAKrE,MAAhF;EACH,KARU;;;EAWX,QAAI9S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcuQ,OAAd,CAAsBK,IAAjC,CAAJ,EAA4C;EACxC,WAAK5Q,QAAL,CAAcuQ,OAAd,CAAsBK,IAAtB,CAA2B6E,OAA3B,GAAqC,KAAKD,KAAL,IAAc,KAAKrE,MAAL,KAAgB,CAAnE;EACH;EACJ,GAniBY;EAqiBb;EACAoE,EAAAA,QAtiBa,oBAsiBJ1T,MAtiBI,EAsiBe;EAAA,QAAXR,KAAW,uEAAH,CAAG;;EACxB,QAAI,CAAChD,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrB;EACH,KAHuB;;;EAMxBA,IAAAA,MAAM,CAACR,KAAP,GAAeA,KAAf,CANwB;;EASxByO,IAAAA,QAAQ,CAACyD,eAAT,CAAyB1U,IAAzB,CAA8B,IAA9B,EAAoCgD,MAApC;EACH,GAhjBY;EAkjBb;EACA6T,EAAAA,cAnjBa,0BAmjBEvY,KAnjBF,EAmjBS;EAAA;;EAClB,QAAI,CAAC,KAAKO,SAAL,CAAe8J,EAAhB,IAAsB,CAACnJ,EAAE,CAAClB,KAAH,CAASA,KAAT,CAA3B,EAA4C;EACxC;EACH;;EAED,QAAIkE,KAAK,GAAG,CAAZ;;EAEA,QAAMsU,WAAW,GAAG,SAAdA,WAAc,CAAC9T,MAAD,EAASjI,KAAT,EAAmB;EACnC,UAAMyH,KAAK,GAAGhD,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,IAAmBA,KAAnB,GAA2B,CAAzC;EACA,UAAMoX,QAAQ,GAAG3S,EAAE,CAACpB,OAAH,CAAW4E,MAAX,IAAqBA,MAArB,GAA8B,MAAI,CAAC7B,QAAL,CAAcoR,OAAd,CAAsBC,MAArE,CAFmC;;EAKnC,UAAIhT,EAAE,CAACpB,OAAH,CAAW+T,QAAX,CAAJ,EAA0B;EACtBA,QAAAA,QAAQ,CAAC3P,KAAT,GAAiBA,KAAjB,CADsB;;EAItB,YAAMyR,KAAK,GAAG9B,QAAQ,CAAC4E,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;;EACA,YAAIvX,EAAE,CAACpB,OAAH,CAAW6V,KAAX,CAAJ,EAAuB;EACnBA,UAAAA,KAAK,CAAC5Q,UAAN,CAAiB,CAAjB,EAAoB2T,SAApB,GAAgCxU,KAAhC;EACH;EACJ;EACJ,KAdD;;EAgBA,QAAIlE,KAAJ,EAAW;EACP,cAAQA,KAAK,CAACsB,IAAd;EACI;EACA,aAAK,YAAL;EACA,aAAK,SAAL;EACA,aAAK,QAAL;EACI4C,UAAAA,KAAK,GAAGmK,aAAa,CAAC,KAAKnC,WAAN,EAAmB,KAAKiI,QAAxB,CAArB,CADJ;;EAII,cAAInU,KAAK,CAACsB,IAAN,KAAe,YAAnB,EAAiC;EAC7BqR,YAAAA,QAAQ,CAACyF,QAAT,CAAkB1W,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAciR,MAAd,CAAqBC,IAAlD,EAAwD7P,KAAxD;EACH;;EAED;EAEJ;;EACA,aAAK,SAAL;EACA,aAAK,UAAL;EACIsU,UAAAA,WAAW,CAAC,KAAK3V,QAAL,CAAcoR,OAAd,CAAsBC,MAAvB,EAA+B,KAAKyE,QAAL,GAAgB,GAA/C,CAAX;EAEA;;EAEJ;EACI;EAtBR;EAwBH;EACJ,GApmBY;EAsmBb;EACAvC,EAAAA,eAvmBa,2BAumBG1R,MAvmBH,EAumBW;EACpB;EACA,QAAM0G,KAAK,GAAGlK,EAAE,CAAClB,KAAH,CAAS0E,MAAT,IAAmBA,MAAM,CAACA,MAA1B,GAAmCA,MAAjD,CAFoB;;EAKpB,QAAI,CAACxD,EAAE,CAACpB,OAAH,CAAWsL,KAAX,CAAD,IAAsBA,KAAK,CAACS,YAAN,CAAmB,MAAnB,MAA+B,OAAzD,EAAkE;EAC9D;EACH,KAPmB;;;EAUpB,QAAI9E,OAAO,CAACqE,KAAD,EAAQ,KAAK/C,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BC,IAArC,CAAX,EAAuD;EACnD3I,MAAAA,KAAK,CAAChH,YAAN,CAAmB,eAAnB,EAAoC,KAAK8H,WAAzC;EACA,UAAMA,WAAW,GAAGyG,QAAQ,CAACP,UAAT,CAAoB,KAAKlG,WAAzB,CAApB;EACA,UAAMiI,QAAQ,GAAGxB,QAAQ,CAACP,UAAT,CAAoB,KAAK+B,QAAzB,CAAjB;EACA,UAAMjG,SAAM,GAAGyB,IAAI,CAACjP,GAAL,CAAS,WAAT,EAAsB,KAAK2H,MAA3B,CAAf;EACA+C,MAAAA,KAAK,CAAChH,YAAN,CACI,gBADJ,EAEI8J,SAAM,CAACrI,OAAP,CAAe,eAAf,EAAgCqG,WAAhC,EAA6CrG,OAA7C,CAAqD,YAArD,EAAmEsO,QAAnE,CAFJ;EAIH,KATD,MASO,IAAIpN,OAAO,CAACqE,KAAD,EAAQ,KAAK/C,MAAL,CAAY8K,SAAZ,CAAsBW,MAAtB,CAA6BE,MAArC,CAAX,EAAyD;EAC5D,UAAM4E,OAAO,GAAGxN,KAAK,CAAClH,KAAN,GAAc,GAA9B;EACAkH,MAAAA,KAAK,CAAChH,YAAN,CAAmB,eAAnB,EAAoCwU,OAApC;EACAxN,MAAAA,KAAK,CAAChH,YAAN,CAAmB,gBAAnB,YAAwCwU,OAAO,CAACpK,OAAR,CAAgB,CAAhB,CAAxC;EACH,KAJM,MAIA;EACHpD,MAAAA,KAAK,CAAChH,YAAN,CAAmB,eAAnB,EAAoCgH,KAAK,CAAClH,KAA1C;EACH,KAzBmB;;;EA4BpB,QAAI,CAAC+E,OAAO,CAACG,QAAb,EAAuB;EACnB;EACH,KA9BmB;;;EAiCpBgC,IAAAA,KAAK,CAACvC,KAAN,CAAYgQ,WAAZ,CAAwB,SAAxB,YAAsCzN,KAAK,CAAClH,KAAN,GAAckH,KAAK,CAACmD,GAApB,GAA0B,GAAhE;EACH,GAzoBY;EA2oBb;EACAuK,EAAAA,iBA5oBa,6BA4oBK9Y,KA5oBL,EA4oBY;EAAA;;EACrB;EACA,QACI,CAAC,KAAKqI,MAAL,CAAY0Q,QAAZ,CAAqBhF,IAAtB,IACA,CAAC7S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAciR,MAAd,CAAqBC,IAAhC,CADD,IAEA,CAAC7S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcoR,OAAd,CAAsBG,WAAjC,CAFD,IAGA,KAAKD,QAAL,KAAkB,CAJtB,EAKE;EACE;EACH,KAToB;;;EAYrB,QAAIyE,OAAO,GAAG,CAAd;EACA,QAAMI,UAAU,GAAG,KAAKnW,QAAL,CAAcgR,QAAd,CAAuBoF,qBAAvB,EAAnB;EACA,QAAMC,OAAO,aAAM,KAAK7Q,MAAL,CAAYC,UAAZ,CAAuB+L,OAA7B,cAAb;;EAEA,QAAMtT,MAAM,GAAG,gBAAAA,OAAM,EAAI;EACrByF,MAAAA,WAAW,CAAC,MAAI,CAAC3D,QAAL,CAAcoR,OAAd,CAAsBG,WAAvB,EAAoC8E,OAApC,EAA6CnY,OAA7C,CAAX;EACH,KAFD,CAhBqB;;;EAqBrB,QAAI,KAAKsK,KAAT,EAAgB;EACZtK,MAAAA,MAAM,CAAC,KAAD,CAAN;EACA;EACH,KAxBoB;;;EA2BrB,QAAIG,EAAE,CAAClB,KAAH,CAASA,KAAT,CAAJ,EAAqB;EACjB4Y,MAAAA,OAAO,GAAG,MAAMI,UAAU,CAACG,KAAjB,IAA0BnZ,KAAK,CAACoZ,KAAN,GAAcJ,UAAU,CAACK,IAAnD,CAAV;EACH,KAFD,MAEO,IAAIvS,QAAQ,CAAC,KAAKjE,QAAL,CAAcoR,OAAd,CAAsBG,WAAvB,EAAoC8E,OAApC,CAAZ,EAA0D;EAC7DN,MAAAA,OAAO,GAAGZ,UAAU,CAAC,KAAKnV,QAAL,CAAcoR,OAAd,CAAsBG,WAAtB,CAAkCvL,KAAlC,CAAwCwQ,IAAzC,EAA+C,EAA/C,CAApB;EACH,KAFM,MAEA;EACH;EACH,KAjCoB;;;EAoCrB,QAAIT,OAAO,GAAG,CAAd,EAAiB;EACbA,MAAAA,OAAO,GAAG,CAAV;EACH,KAFD,MAEO,IAAIA,OAAO,GAAG,GAAd,EAAmB;EACtBA,MAAAA,OAAO,GAAG,GAAV;EACH,KAxCoB;;;EA2CrBjG,IAAAA,QAAQ,CAACuF,iBAAT,CAA2BxW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcoR,OAAd,CAAsBG,WAA5D,EAAyE,KAAKD,QAAL,GAAgB,GAAhB,GAAsByE,OAA/F,EA3CqB;;EA8CrB,SAAK/V,QAAL,CAAcoR,OAAd,CAAsBG,WAAtB,CAAkCvL,KAAlC,CAAwCwQ,IAAxC,aAAkDT,OAAlD,OA9CqB;EAiDrB;;EACA,QAAI1X,EAAE,CAAClB,KAAH,CAASA,KAAT,KAAmB,CAAC,YAAD,EAAe,YAAf,EAA6BkH,QAA7B,CAAsClH,KAAK,CAACsB,IAA5C,CAAvB,EAA0E;EACtEP,MAAAA,MAAM,CAACf,KAAK,CAACsB,IAAN,KAAe,YAAhB,CAAN;EACH;EACJ,GAjsBY;EAmsBb;EACAgY,EAAAA,UApsBa,sBAosBFtZ,KApsBE,EAosBK;EACd;EACA,QAAMuZ,MAAM,GAAG,CAACrY,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcoR,OAAd,CAAsBE,QAAjC,CAAD,IAA+C,KAAK9L,MAAL,CAAYmR,UAA1E,CAFc;;EAKd7G,IAAAA,QAAQ,CAACuF,iBAAT,CAA2BxW,IAA3B,CACI,IADJ,EAEI,KAAKmB,QAAL,CAAcoR,OAAd,CAAsB/H,WAF1B,EAGIqN,MAAM,GAAG,KAAKpF,QAAL,GAAgB,KAAKjI,WAAxB,GAAsC,KAAKA,WAHrD,EAIIqN,MAJJ,EALc;;EAad,QAAIvZ,KAAK,IAAIA,KAAK,CAACsB,IAAN,KAAe,YAAxB,IAAwC,KAAK2J,KAAL,CAAWwO,OAAvD,EAAgE;EAC5D;EACH,KAfa;;;EAkBd9G,IAAAA,QAAQ,CAAC4F,cAAT,CAAwB7W,IAAxB,CAA6B,IAA7B,EAAmC1B,KAAnC;EACH,GAvtBY;EAytBb;EACA0Z,EAAAA,cA1tBa,4BA0tBI;EACb;EACA,QAAI,CAAC,KAAKnZ,SAAL,CAAe8J,EAAhB,IAAuB,CAAC,KAAKhC,MAAL,CAAYmR,UAAb,IAA2B,KAAKtN,WAA3D,EAAyE;EACrE;EACH,KAJY;EAOb;EACA;EACA;;;EACA,QAAI,KAAKiI,QAAL,aAAiB,CAAjB,EAAsB,EAAtB,CAAJ,EAA8B;EAC1B/N,MAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAcoR,OAAd,CAAsB/H,WAAvB,EAAoC,IAApC,CAAZ;EACA9F,MAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAcgR,QAAf,EAAyB,IAAzB,CAAZ;EACA;EACH,KAdY;;;EAiBb,QAAI3S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAciR,MAAd,CAAqBC,IAAhC,CAAJ,EAA2C;EACvC,WAAKlR,QAAL,CAAciR,MAAd,CAAqBC,IAArB,CAA0B3P,YAA1B,CAAuC,eAAvC,EAAwD,KAAK+P,QAA7D;EACH,KAnBY;;;EAsBb,QAAMwF,WAAW,GAAGzY,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcoR,OAAd,CAAsBE,QAAjC,CAApB,CAtBa;;EAyBb,QAAI,CAACwF,WAAD,IAAgB,KAAKtR,MAAL,CAAYuR,eAA5B,IAA+C,KAAKzN,MAAxD,EAAgE;EAC5DwG,MAAAA,QAAQ,CAACuF,iBAAT,CAA2BxW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcoR,OAAd,CAAsB/H,WAA5D,EAAyE,KAAKiI,QAA9E;EACH,KA3BY;;;EA8Bb,QAAIwF,WAAJ,EAAiB;EACbhH,MAAAA,QAAQ,CAACuF,iBAAT,CAA2BxW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcoR,OAAd,CAAsBE,QAA5D,EAAsE,KAAKA,QAA3E;EACH,KAhCY;;;EAmCbxB,IAAAA,QAAQ,CAACmG,iBAAT,CAA2BpX,IAA3B,CAAgC,IAAhC;EACH,GA9vBY;EAgwBb;EACAmY,EAAAA,gBAjwBa,4BAiwBIC,OAjwBJ,EAiwBa/Y,MAjwBb,EAiwBqB;EAC9BqF,IAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAc6Q,QAAd,CAAuBN,OAAvB,CAA+B0G,OAA/B,CAAD,EAA0C,CAAC/Y,MAA3C,CAAZ;EACH,GAnwBY;EAqwBb;EACAgZ,EAAAA,aAtwBa,yBAswBCD,OAtwBD,EAswBUhX,SAtwBV,EAswBqBrG,KAtwBrB,EAswB4B;EACrC,QAAMud,IAAI,GAAG,KAAKnX,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BH,OAA9B,CAAb;EACA,QAAI5V,KAAK,GAAG,IAAZ;EACA,QAAIoT,IAAI,GAAGxU,SAAX;;EAEA,QAAIgX,OAAO,KAAK,UAAhB,EAA4B;EACxB5V,MAAAA,KAAK,GAAG,KAAK4T,YAAb;EACH,KAFD,MAEO;EACH5T,MAAAA,KAAK,GAAG,CAAChD,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAD,GAAmBA,KAAnB,GAA2B,KAAKqd,OAAL,CAAnC,CADG;;EAIH,UAAI5Y,EAAE,CAACb,KAAH,CAAS6D,KAAT,CAAJ,EAAqB;EACjBA,QAAAA,KAAK,GAAG,KAAKmE,MAAL,CAAYyR,OAAZ,EAAqBI,OAA7B;EACH,OANE;;;EASH,UAAI,CAAChZ,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAasZ,OAAb,CAAT,CAAD,IAAoC,CAAC,KAAKtZ,OAAL,CAAasZ,OAAb,EAAsB5S,QAAtB,CAA+BhD,KAA/B,CAAzC,EAAgF;EAC5E,aAAK0I,KAAL,CAAW2H,IAAX,iCAAyCrQ,KAAzC,mBAAuD4V,OAAvD;EACA;EACH,OAZE;;;EAeH,UAAI,CAAC,KAAKzR,MAAL,CAAYyR,OAAZ,EAAqBtZ,OAArB,CAA6B0G,QAA7B,CAAsChD,KAAtC,CAAL,EAAmD;EAC/C,aAAK0I,KAAL,CAAW2H,IAAX,8BAAsCrQ,KAAtC,mBAAoD4V,OAApD;EACA;EACH;EACJ,KA1BoC;;;EA6BrC,QAAI,CAAC5Y,EAAE,CAACpB,OAAH,CAAWwX,IAAX,CAAL,EAAuB;EACnBA,MAAAA,IAAI,GAAG0C,IAAI,IAAIA,IAAI,CAAC1S,aAAL,CAAmB,eAAnB,CAAf;EACH,KA/BoC;;;EAkCrC,QAAI,CAACpG,EAAE,CAACpB,OAAH,CAAWwX,IAAX,CAAL,EAAuB;EACnB;EACH,KApCoC;;;EAuCrC,QAAM3B,KAAK,GAAG,KAAK9S,QAAL,CAAc6Q,QAAd,CAAuBN,OAAvB,CAA+B0G,OAA/B,EAAwCxS,aAAxC,YAA0D,KAAKe,MAAL,CAAYC,UAAZ,CAAuBiN,IAAvB,CAA4BrR,KAAtF,EAAd;EACAyR,IAAAA,KAAK,CAACtG,SAAN,GAAkBsD,QAAQ,CAACwH,QAAT,CAAkBzY,IAAlB,CAAuB,IAAvB,EAA6BoY,OAA7B,EAAsC5V,KAAtC,CAAlB,CAxCqC;;EA2CrC,QAAMQ,MAAM,GAAG4S,IAAI,IAAIA,IAAI,CAAChQ,aAAL,oBAA8BpD,KAA9B,SAAvB;;EAEA,QAAIhD,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAJ,EAAwB;EACpBA,MAAAA,MAAM,CAAC6S,OAAP,GAAiB,IAAjB;EACH;EACJ,GAtzBY;EAwzBb;EACA4C,EAAAA,QAzzBa,oBAyzBJL,OAzzBI,EAyzBK5V,KAzzBL,EAyzBY;EACrB,YAAQ4V,OAAR;EACI,WAAK,OAAL;EACI,eAAO5V,KAAK,KAAK,CAAV,GAAcyL,IAAI,CAACjP,GAAL,CAAS,QAAT,EAAmB,KAAK2H,MAAxB,CAAd,aAAmDnE,KAAnD,YAAP;;EAEJ,WAAK,SAAL;EACI,YAAIhD,EAAE,CAAC1B,MAAH,CAAU0E,KAAV,CAAJ,EAAsB;EAClB,cAAMyR,KAAK,GAAGhG,IAAI,CAACjP,GAAL,wBAAyBwD,KAAzB,GAAkC,KAAKmE,MAAvC,CAAd;;EAEA,cAAI,CAACsN,KAAK,CAAC7W,MAAX,EAAmB;EACf,6BAAUoF,KAAV;EACH;;EAED,iBAAOyR,KAAP;EACH;;EAED,eAAOhH,WAAW,CAACzK,KAAD,CAAlB;;EAEJ,WAAK,UAAL;EACI,eAAOyP,QAAQ,CAACwG,QAAT,CAAkBzY,IAAlB,CAAuB,IAAvB,CAAP;;EAEJ;EACI,eAAO,IAAP;EArBR;EAuBH,GAj1BY;EAm1Bb;EACA0Y,EAAAA,cAp1Ba,0BAo1BE5Z,OAp1BF,EAo1BW;EAAA;;EACpB;EACA,QAAI,CAACU,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BxN,OAAzC,CAAL,EAAwD;EACpD;EACH;;EAED,QAAMnL,IAAI,GAAG,SAAb;EACA,QAAMgW,IAAI,GAAG,KAAKzU,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BxN,OAA9B,CAAsCnF,aAAtC,CAAoD,eAApD,CAAb,CAPoB;;EAUpB,QAAIpG,EAAE,CAACvB,KAAH,CAASa,OAAT,CAAJ,EAAuB;EACnB,WAAKA,OAAL,CAAaiM,OAAb,GAAuBK,MAAM,CAACtM,OAAD,CAAN,CAAgByD,MAAhB,CAAuB,UAAAwI,OAAO;EAAA,eAAI,MAAI,CAACpE,MAAL,CAAYoE,OAAZ,CAAoBjM,OAApB,CAA4B0G,QAA5B,CAAqCuF,OAArC,CAAJ;EAAA,OAA9B,CAAvB;EACH,KAZmB;;;EAepB,QAAM1L,MAAM,GAAG,CAACG,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAaiM,OAAtB,CAAD,IAAmC,KAAKjM,OAAL,CAAaiM,OAAb,CAAqB3N,MAArB,GAA8B,CAAhF;EACA6T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BnY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EAhBoB;;EAmBpB+D,IAAAA,YAAY,CAACwS,IAAD,CAAZ,CAnBoB;;EAsBpB3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB3Y,IAAnB,CAAwB,IAAxB,EAtBoB;;EAyBpB,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KA3BmB;;;EA8BpB,QAAMuZ,QAAQ,GAAG,SAAXA,QAAW,CAAA7N,OAAO,EAAI;EACxB,UAAMkJ,KAAK,GAAGhG,IAAI,CAACjP,GAAL,wBAAyB+L,OAAzB,GAAoC,MAAI,CAACpE,MAAzC,CAAd;;EAEA,UAAI,CAACsN,KAAK,CAAC7W,MAAX,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,aAAO6T,QAAQ,CAAC0C,WAAT,CAAqB3T,IAArB,CAA0B,MAA1B,EAAgCiU,KAAhC,CAAP;EACH,KARD,CA9BoB;;;EAyCpB,SAAKnV,OAAL,CAAaiM,OAAb,CACK8N,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;EACZ,UAAMC,OAAO,GAAG,MAAI,CAACrS,MAAL,CAAYoE,OAAZ,CAAoBjM,OAApC;EACA,aAAOka,OAAO,CAAC3N,OAAR,CAAgByN,CAAhB,IAAqBE,OAAO,CAAC3N,OAAR,CAAgB0N,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;EACH,KAJL,EAKKpZ,OALL,CAKa,UAAAoL,OAAO,EAAI;EAChBkG,MAAAA,QAAQ,CAAC0E,cAAT,CAAwB3V,IAAxB,CAA6B,MAA7B,EAAmC;EAC/BwC,QAAAA,KAAK,EAAEuI,OADwB;EAE/B6K,QAAAA,IAAI,EAAJA,IAF+B;EAG/BhW,QAAAA,IAAI,EAAJA,IAH+B;EAI/BuO,QAAAA,KAAK,EAAE8C,QAAQ,CAACwH,QAAT,CAAkBzY,IAAlB,CAAuB,MAAvB,EAA6B,SAA7B,EAAwC+K,OAAxC,CAJwB;EAK/B6I,QAAAA,KAAK,EAAEgF,QAAQ,CAAC7N,OAAD;EALgB,OAAnC;EAOH,KAbL;EAeAkG,IAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCgW,IAAxC;EACH,GA74BY;EA+4Bb;;EACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA;EACA;EAEA;EACAqD,EAAAA,eA/7Ba,6BA+7BK;EAAA;;EACd;EACA,QAAI,CAACzZ,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BtG,QAAzC,CAAL,EAAyD;EACrD;EACH,KAJa;;;EAOd,QAAMrS,IAAI,GAAG,UAAb;EACA,QAAMgW,IAAI,GAAG,KAAKzU,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BtG,QAA9B,CAAuCrM,aAAvC,CAAqD,eAArD,CAAb;EACA,QAAMsT,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,QAAMX,MAAM,GAAGnE,OAAO,CAACge,MAAM,CAAC9b,MAAR,CAAtB,CAVc;;EAad6T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BnY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EAbc;;EAgBd+D,IAAAA,YAAY,CAACwS,IAAD,CAAZ,CAhBc;;EAmBd3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB3Y,IAAnB,CAAwB,IAAxB,EAnBc;;EAsBd,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KAxBa;;;EA2Bd,QAAMP,OAAO,GAAGoa,MAAM,CAAClU,GAAP,CAAW,UAACvG,KAAD,EAAQ+D,KAAR;EAAA,aAAmB;EAC1CA,QAAAA,KAAK,EAALA,KAD0C;EAE1CqT,QAAAA,OAAO,EAAE,MAAI,CAAC5D,QAAL,CAAcmH,OAAd,IAAyB,MAAI,CAAChD,YAAL,KAAsB5T,KAFd;EAG1C2L,QAAAA,KAAK,EAAE8D,QAAQ,CAACwG,QAAT,CAAkBzY,IAAlB,CAAuB,MAAvB,EAA6BvB,KAA7B,CAHmC;EAI1CmV,QAAAA,KAAK,EAAEnV,KAAK,CAAC4a,QAAN,IAAkBpI,QAAQ,CAAC0C,WAAT,CAAqB3T,IAArB,CAA0B,MAA1B,EAAgCvB,KAAK,CAAC4a,QAAN,CAAenM,WAAf,EAAhC,CAJiB;EAK1C0I,QAAAA,IAAI,EAAJA,IAL0C;EAM1ChW,QAAAA,IAAI,EAAE;EANoC,OAAnB;EAAA,KAAX,CAAhB,CA3Bc;;EAqCdd,IAAAA,OAAO,CAACwa,OAAR,CAAgB;EACZ9W,MAAAA,KAAK,EAAE,CAAC,CADI;EAEZqT,MAAAA,OAAO,EAAE,CAAC,KAAK5D,QAAL,CAAcmH,OAFZ;EAGZjL,MAAAA,KAAK,EAAEF,IAAI,CAACjP,GAAL,CAAS,UAAT,EAAqB,KAAK2H,MAA1B,CAHK;EAIZiP,MAAAA,IAAI,EAAJA,IAJY;EAKZhW,MAAAA,IAAI,EAAE;EALM,KAAhB,EArCc;;EA8Cdd,IAAAA,OAAO,CAACa,OAAR,CAAgBsR,QAAQ,CAAC0E,cAAT,CAAwBQ,IAAxB,CAA6B,IAA7B,CAAhB;EAEAlF,IAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCgW,IAAxC;EACH,GAh/BY;EAk/Bb;EACA2D,EAAAA,YAn/Ba,wBAm/BAza,OAn/BA,EAm/BS;EAAA;;EAClB;EACA,QAAI,CAACU,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BlC,KAAzC,CAAL,EAAsD;EAClD;EACH;;EAED,QAAMzW,IAAI,GAAG,OAAb;EACA,QAAMgW,IAAI,GAAG,KAAKzU,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BlC,KAA9B,CAAoCzQ,aAApC,CAAkD,eAAlD,CAAb,CAPkB;;EAUlB,QAAIpG,EAAE,CAACvB,KAAH,CAASa,OAAT,CAAJ,EAAuB;EACnB,WAAKA,OAAL,CAAauX,KAAb,GAAqBvX,OAArB;EACH,KAFD,MAEO,IAAI,KAAKwK,OAAL,IAAgB,KAAKkQ,OAAzB,EAAkC;EACrC,WAAK1a,OAAL,CAAauX,KAAb,GAAqB,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC,CAArB;EACH,KAdiB;;;EAiBlB,SAAKvX,OAAL,CAAauX,KAAb,GAAqB,KAAKvX,OAAL,CAAauX,KAAb,CAAmB9T,MAAnB,CAA0B,UAAA8T,KAAK;EAAA,aAAI,MAAI,CAAC1P,MAAL,CAAY0P,KAAZ,CAAkBvX,OAAlB,CAA0B0G,QAA1B,CAAmC6Q,KAAnC,CAAJ;EAAA,KAA/B,CAArB,CAjBkB;;EAoBlB,QAAMhX,MAAM,GAAG,CAACG,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAauX,KAAtB,CAAD,IAAiC,KAAKvX,OAAL,CAAauX,KAAb,CAAmBjZ,MAAnB,GAA4B,CAA5E;EACA6T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BnY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EArBkB;;EAwBlB+D,IAAAA,YAAY,CAACwS,IAAD,CAAZ,CAxBkB;;EA2BlB3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB3Y,IAAnB,CAAwB,IAAxB,EA3BkB;;EA8BlB,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KAhCiB;;;EAmClB,SAAKP,OAAL,CAAauX,KAAb,CAAmB1W,OAAnB,CAA2B,UAAA0W,KAAK,EAAI;EAChCpF,MAAAA,QAAQ,CAAC0E,cAAT,CAAwB3V,IAAxB,CAA6B,MAA7B,EAAmC;EAC/BwC,QAAAA,KAAK,EAAE6T,KADwB;EAE/BT,QAAAA,IAAI,EAAJA,IAF+B;EAG/BhW,QAAAA,IAAI,EAAJA,IAH+B;EAI/BuO,QAAAA,KAAK,EAAE8C,QAAQ,CAACwH,QAAT,CAAkBzY,IAAlB,CAAuB,MAAvB,EAA6B,OAA7B,EAAsCqW,KAAtC;EAJwB,OAAnC;EAMH,KAPD;EASApF,IAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCgW,IAAxC;EACH,GAhiCY;EAkiCb;EACA+C,EAAAA,SAniCa,uBAmiCD;EAAA,QACAjH,OADA,GACY,KAAKvQ,QAAL,CAAc6Q,QAD1B,CACAN,OADA;EAER,QAAM8F,OAAO,GAAG,CAAChY,EAAE,CAACb,KAAH,CAAS+S,OAAT,CAAD,IAAsBrW,MAAM,CAACoe,MAAP,CAAc/H,OAAd,EAAuBgI,IAAvB,CAA4B,UAAArF,MAAM;EAAA,aAAI,CAACA,MAAM,CAAC1P,MAAZ;EAAA,KAAlC,CAAtC;EAEAD,IAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAc6Q,QAAd,CAAuB6B,IAAxB,EAA8B,CAAC2D,OAA/B,CAAZ;EACH,GAxiCY;EA0iCb;EACA9B,EAAAA,kBA3iCa,8BA2iCM4C,IA3iCN,EA2iC8B;EAAA,QAAlB7R,QAAkB,uEAAP,KAAO;;EACvC,QAAI,KAAKtF,QAAL,CAAc6Q,QAAd,CAAuB2H,KAAvB,CAA6BhV,MAAjC,EAAyC;EACrC;EACH;;EAED,QAAI3B,MAAM,GAAGsV,IAAb;;EAEA,QAAI,CAAC9Y,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,MAAAA,MAAM,GAAG3H,MAAM,CAACoe,MAAP,CAAc,KAAKtY,QAAL,CAAc6Q,QAAd,CAAuBuG,MAArC,EAA6CrR,IAA7C,CAAkD,UAAAoR,IAAI;EAAA,eAAI,CAACA,IAAI,CAAC3T,MAAV;EAAA,OAAtD,CAAT;EACH;;EAED,QAAMiV,SAAS,GAAG5W,MAAM,CAAC4C,aAAP,CAAqB,oBAArB,CAAlB;EAEAY,IAAAA,QAAQ,CAACxG,IAAT,CAAc,IAAd,EAAoB4Z,SAApB,EAA+BnT,QAA/B;EACH,GAzjCY;EA2jCb;EACAoT,EAAAA,UA5jCa,sBA4jCF9e,KA5jCE,EA4jCK;EAAA,QACN4e,KADM,GACI,KAAKxY,QAAL,CAAc6Q,QADlB,CACN2H,KADM;EAEd,QAAMtF,MAAM,GAAG,KAAKlT,QAAL,CAAcuQ,OAAd,CAAsBM,QAArC,CAFc;;EAKd,QAAI,CAACxS,EAAE,CAACpB,OAAH,CAAWub,KAAX,CAAD,IAAsB,CAACna,EAAE,CAACpB,OAAH,CAAWiW,MAAX,CAA3B,EAA+C;EAC3C;EACH,KAPa;;;EAAA,QAUN1P,MAVM,GAUKgV,KAVL,CAUNhV,MAVM;EAWd,QAAImV,IAAI,GAAGnV,MAAX;;EAEA,QAAInF,EAAE,CAACzB,OAAH,CAAWhD,KAAX,CAAJ,EAAuB;EACnB+e,MAAAA,IAAI,GAAG/e,KAAP;EACH,KAFD,MAEO,IAAIyE,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,KAA2BA,KAAK,CAACma,KAAN,KAAgB,EAA/C,EAAmD;EACtD4E,MAAAA,IAAI,GAAG,KAAP;EACH,KAFM,MAEA,IAAIta,EAAE,CAAClB,KAAH,CAASvD,KAAT,CAAJ,EAAqB;EACxB,UAAMgf,UAAU,GAAGJ,KAAK,CAACxU,QAAN,CAAepK,KAAK,CAACiI,MAArB,CAAnB,CADwB;EAIxB;EACA;;EACA,UAAI+W,UAAU,IAAK,CAACA,UAAD,IAAehf,KAAK,CAACiI,MAAN,KAAiBqR,MAAhC,IAA0CyF,IAA7D,EAAoE;EAChE;EACH;EACJ,KA1Ba;;;EA6BdzF,IAAAA,MAAM,CAAC3R,YAAP,CAAoB,eAApB,EAAqCoX,IAArC,EA7Bc;;EAgCdpV,IAAAA,YAAY,CAACiV,KAAD,EAAQ,CAACG,IAAT,CAAZ,CAhCc;;EAmCdhV,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBiN,IAAvB,CAA4BvE,IAAtD,EAA4DwK,IAA5D,CAAX,CAnCc;;EAsCd,QAAIA,IAAI,IAAIta,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,CAAZ,EAAqC;EACjCkW,MAAAA,QAAQ,CAACyE,kBAAT,CAA4B1V,IAA5B,CAAiC,IAAjC,EAAuC,IAAvC,EAA6C,IAA7C;EACH,KAFD,MAEO,IAAI,CAAC8Z,IAAD,IAAS,CAACnV,MAAd,EAAsB;EACzB;EACA6B,MAAAA,QAAQ,CAACxG,IAAT,CAAc,IAAd,EAAoBqU,MAApB,EAA4B7U,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,CAA5B;EACH;EACJ,GAxmCY;EA0mCb;EACAif,EAAAA,WA3mCa,uBA2mCDC,GA3mCC,EA2mCI;EACb,QAAMC,KAAK,GAAGD,GAAG,CAACpY,SAAJ,CAAc,IAAd,CAAd;EACAqY,IAAAA,KAAK,CAAC/S,KAAN,CAAYgT,QAAZ,GAAuB,UAAvB;EACAD,IAAAA,KAAK,CAAC/S,KAAN,CAAYiT,OAAZ,GAAsB,CAAtB;EACAF,IAAAA,KAAK,CAACrV,eAAN,CAAsB,QAAtB,EAJa;;EAOboV,IAAAA,GAAG,CAAClY,UAAJ,CAAeG,WAAf,CAA2BgY,KAA3B,EAPa;;EAUb,QAAMzC,KAAK,GAAGyC,KAAK,CAACG,WAApB;EACA,QAAMC,MAAM,GAAGJ,KAAK,CAACK,YAArB,CAXa;;EAcbrX,IAAAA,aAAa,CAACgX,KAAD,CAAb;EAEA,WAAO;EACHzC,MAAAA,KAAK,EAALA,KADG;EAEH6C,MAAAA,MAAM,EAANA;EAFG,KAAP;EAIH,GA/nCY;EAioCb;EACAjF,EAAAA,aAloCa,2BAkoC8B;EAAA;;EAAA,QAA7BzV,IAA6B,uEAAtB,EAAsB;EAAA,QAAlB6G,QAAkB,uEAAP,KAAO;EACvC,QAAMzD,MAAM,GAAGH,QAAQ,CAAC+M,cAAT,yBAAyC,KAAKnL,EAA9C,cAAoD7E,IAApD,EAAf,CADuC;;EAIvC,QAAI,CAACJ,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrB;EACH,KANsC;;;EASvC,QAAM5B,SAAS,GAAG4B,MAAM,CAACjB,UAAzB;EACA,QAAM6K,OAAO,GAAG7Q,KAAK,CAAC0F,IAAN,CAAWL,SAAS,CAAC4U,QAArB,EAA+B9O,IAA/B,CAAoC,UAAA+O,IAAI;EAAA,aAAI,CAACA,IAAI,CAACtR,MAAV;EAAA,KAAxC,CAAhB,CAVuC;;EAavC,QAAIwD,OAAO,CAACyB,WAAR,IAAuB,CAACzB,OAAO,CAAC0B,aAApC,EAAmD;EAC/C;EACAzI,MAAAA,SAAS,CAAC+F,KAAV,CAAgBsQ,KAAhB,aAA2B7K,OAAO,CAACyN,WAAnC;EACAjZ,MAAAA,SAAS,CAAC+F,KAAV,CAAgBmT,MAAhB,aAA4B1N,OAAO,CAAC2N,YAApC,QAH+C;;EAM/C,UAAMC,IAAI,GAAGvJ,QAAQ,CAAC+I,WAAT,CAAqBha,IAArB,CAA0B,IAA1B,EAAgCgD,MAAhC,CAAb,CAN+C;;EAS/C,UAAMyX,OAAO,GAAG,SAAVA,OAAU,CAAAnc,KAAK,EAAI;EACrB;EACA,YAAIA,KAAK,CAAC0E,MAAN,KAAiB5B,SAAjB,IAA8B,CAAC,CAAC,OAAD,EAAU,QAAV,EAAoBoE,QAApB,CAA6BlH,KAAK,CAACoc,YAAnC,CAAnC,EAAqF;EACjF;EACH,SAJoB;;;EAOrBtZ,QAAAA,SAAS,CAAC+F,KAAV,CAAgBsQ,KAAhB,GAAwB,EAAxB;EACArW,QAAAA,SAAS,CAAC+F,KAAV,CAAgBmT,MAAhB,GAAyB,EAAzB,CARqB;;EAWrBra,QAAAA,GAAG,CAACD,IAAJ,CAAS,MAAT,EAAeoB,SAAf,EAA0ByF,kBAA1B,EAA8C4T,OAA9C;EACH,OAZD,CAT+C;;;EAwB/C1a,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAcoB,SAAd,EAAyByF,kBAAzB,EAA6C4T,OAA7C,EAxB+C;;EA2B/CrZ,MAAAA,SAAS,CAAC+F,KAAV,CAAgBsQ,KAAhB,aAA2B+C,IAAI,CAAC/C,KAAhC;EACArW,MAAAA,SAAS,CAAC+F,KAAV,CAAgBmT,MAAhB,aAA4BE,IAAI,CAACF,MAAjC;EACH,KA1CsC;;;EA6CvC5V,IAAAA,YAAY,CAACkI,OAAD,EAAU,IAAV,CAAZ,CA7CuC;;EAgDvClI,IAAAA,YAAY,CAAC1B,MAAD,EAAS,KAAT,CAAZ,CAhDuC;;EAmDvCiO,IAAAA,QAAQ,CAACyE,kBAAT,CAA4B1V,IAA5B,CAAiC,IAAjC,EAAuCgD,MAAvC,EAA+CyD,QAA/C;EACH,GAtrCY;EAwrCb;EACAkU,EAAAA,eAzrCa,6BAyrCK;EACd,QAAMtG,MAAM,GAAG,KAAKlT,QAAL,CAAcuQ,OAAd,CAAsBkJ,QAArC,CADc;;EAId,QAAI,CAACpb,EAAE,CAACpB,OAAH,CAAWiW,MAAX,CAAL,EAAyB;EACrB;EACH,KANa;;;EASdA,IAAAA,MAAM,CAAC3R,YAAP,CAAoB,MAApB,EAA4B,KAAKkY,QAAjC;EACH,GAnsCY;EAqsCb;EACA;EACAC,EAAAA,MAvsCa,kBAusCN/K,IAvsCM,EAusCA;EAAA;;EACT;EACA,QAAM1O,SAAS,GAAGuB,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBR,QAAtB,CAA+B1P,OAAhC,CAAjC,CAA/B,CAFS;;EAKT,QAAI,KAAKoF,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;EAC1CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;EACH,KAPQ;;;EAUT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;EACzCpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;EACH,KAZQ;;;EAeT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;EACvCpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;EACH,KAjBQ;;;EAoBT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;EAC/CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;EACH,KAtBQ;;;EAyBT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3C,UAAM2M,QAAQ,GAAGxP,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBU,QAAvB,CAAjC,CAA9B,CAD2C;;EAI3CA,MAAAA,QAAQ,CAACjQ,WAAT,CACI+O,QAAQ,CAACqD,WAAT,CAAqBtU,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;EACpCyE,QAAAA,EAAE,sBAAeqL,IAAI,CAACrL,EAApB;EADkC,OAAxC,CADJ,EAJ2C;;EAW3C0N,MAAAA,QAAQ,CAACjQ,WAAT,CAAqB+O,QAAQ,CAAC0D,cAAT,CAAwB3U,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB,EAX2C;EAe3C;;EACA,UAAI,KAAK2G,MAAL,CAAY0Q,QAAZ,CAAqBhF,IAAzB,EAA+B;EAC3B,YAAMM,OAAO,GAAGhQ,aAAa,CACzB,MADyB,EAEzB;EACI6B,UAAAA,KAAK,EAAE,KAAKmC,MAAL,CAAYC,UAAZ,CAAuB+L;EADlC,SAFyB,EAKzB,OALyB,CAA7B;EAQAR,QAAAA,QAAQ,CAACjQ,WAAT,CAAqByQ,OAArB;EACA,aAAKxR,QAAL,CAAcoR,OAAd,CAAsBG,WAAtB,GAAoCC,OAApC;EACH;;EAED,WAAKxR,QAAL,CAAcgR,QAAd,GAAyBA,QAAzB;EACA/Q,MAAAA,SAAS,CAACc,WAAV,CAAsB,KAAKf,QAAL,CAAcgR,QAApC;EACH,KAxDQ;;;EA2DT,QAAI,KAAKxL,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;EAC/CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC8D,UAAT,CAAoB/U,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;EACH,KA7DQ;;;EAgET,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC8D,UAAT,CAAoB/U,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;EACH,KAlEQ;;;EAqET,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,KAAyC,KAAKmB,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAA7C,EAAsF;EAClF,UAAM8M,MAAM,GAAG3P,aAAa,CAAC,KAAD,EAAQ;EAChC6B,QAAAA,KAAK,EAAE;EADyB,OAAR,CAA5B,CADkF;;EAMlF,UAAI,KAAKmC,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;EACvC8M,QAAAA,MAAM,CAACpQ,WAAP,CAAmB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAnB;EACH,OARiF;;;EAWlF,UAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;EACzC;EACA,YAAMnD,UAAU,GAAG;EACfwK,UAAAA,GAAG,EAAE,CADU;EAEf2H,UAAAA,IAAI,EAAE,IAFS;EAGfhS,UAAAA,KAAK,EAAE,KAAKmE,MAAL,CAAY2L;EAHJ,SAAnB,CAFyC;;EASzCA,QAAAA,MAAM,CAACpQ,WAAP,CACI+O,QAAQ,CAACqD,WAAT,CAAqBtU,IAArB,CACI,IADJ,EAEI,QAFJ,EAGIqK,MAAM,CAAChI,UAAD,EAAa;EACfoC,UAAAA,EAAE,wBAAiBqL,IAAI,CAACrL,EAAtB;EADa,SAAb,CAHV,CADJ;EAUA,aAAKtD,QAAL,CAAcmR,MAAd,GAAuBA,MAAvB;EACH;;EAEDlR,MAAAA,SAAS,CAACc,WAAV,CAAsBoQ,MAAtB;EACH,KAvGQ;;;EA0GT,QAAI,KAAK3L,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;EACH,KA5GQ;;;EA+GT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,KAA6C,CAAChG,EAAE,CAACb,KAAH,CAAS,KAAKgI,MAAL,CAAYqL,QAArB,CAAlD,EAAkF;EAC9E,UAAMoC,OAAO,GAAGzR,aAAa,CAAC,KAAD,EAAQ;EACjC6B,QAAAA,KAAK,EAAE,YAD0B;EAEjCG,QAAAA,MAAM,EAAE;EAFyB,OAAR,CAA7B;EAKAyP,MAAAA,OAAO,CAAClS,WAAR,CACI+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;EACzC,yBAAiB,IADwB;EAEzC,iDAAkC8P,IAAI,CAACrL,EAAvC,CAFyC;EAGzC,yBAAiB;EAHwB,OAA7C,CADJ;EAQA,UAAMkV,KAAK,GAAGhX,aAAa,CAAC,KAAD,EAAQ;EAC/B6B,QAAAA,KAAK,EAAE,uBADwB;EAE/BC,QAAAA,EAAE,0BAAmBqL,IAAI,CAACrL,EAAxB,CAF6B;EAG/BE,QAAAA,MAAM,EAAE;EAHuB,OAAR,CAA3B;EAMA,UAAMmW,KAAK,GAAGnY,aAAa,CAAC,KAAD,CAA3B;EAEA,UAAMoY,IAAI,GAAGpY,aAAa,CAAC,KAAD,EAAQ;EAC9B8B,QAAAA,EAAE,0BAAmBqL,IAAI,CAACrL,EAAxB;EAD4B,OAAR,CAA1B,CAtB8E;;EA2B9E,UAAMoP,IAAI,GAAGlR,aAAa,CAAC,KAAD,EAAQ;EAC9B0Q,QAAAA,IAAI,EAAE;EADwB,OAAR,CAA1B;EAIA0H,MAAAA,IAAI,CAAC7Y,WAAL,CAAiB2R,IAAjB;EACAiH,MAAAA,KAAK,CAAC5Y,WAAN,CAAkB6Y,IAAlB;EACA,WAAK5Z,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8BwC,IAA9B,GAAqCA,IAArC,CAjC8E;;EAoC9E,WAAKpU,MAAL,CAAYqL,QAAZ,CAAqBrS,OAArB,CAA6B,UAAAC,IAAI,EAAI;EACjC;EACA,YAAMqV,QAAQ,GAAGtS,aAAa,CAC1B,QAD0B,EAE1B0H,MAAM,CAAC1G,yBAAyB,CAAC,MAAI,CAACgD,MAAL,CAAY8K,SAAZ,CAAsBC,OAAtB,CAA8BM,QAA/B,CAA1B,EAAoE;EACtEpS,UAAAA,IAAI,EAAE,QADgE;EAEtE4E,UAAAA,KAAK,YAAK,MAAI,CAACmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA5B,cAAuC,MAAI,CAACzN,MAAL,CAAYC,UAAZ,CAAuBwN,OAA9D,cAFiE;EAGtEf,UAAAA,IAAI,EAAE,UAHgE;EAItE,2BAAiB,IAJqD;EAKtE1O,UAAAA,MAAM,EAAE;EAL8D,SAApE,CAFoB,CAA9B,CAFiC;;EAcjCsM,QAAAA,QAAQ,CAAC+D,qBAAT,CAA+BhV,IAA/B,CAAoC,MAApC,EAA0CiV,QAA1C,EAAoDrV,IAApD,EAdiC;;EAiBjCG,QAAAA,EAAE,CAACkV,QAAD,EAAW,OAAX,EAAoB,YAAM;EACxBhE,UAAAA,QAAQ,CAACoE,aAAT,CAAuBrV,IAAvB,CAA4B,MAA5B,EAAkCJ,IAAlC,EAAwC,KAAxC;EACH,SAFC,CAAF;EAIA,YAAMkW,IAAI,GAAGnT,aAAa,CAAC,MAAD,EAAS,IAAT,EAAesL,IAAI,CAACjP,GAAL,CAASY,IAAT,EAAe,MAAI,CAAC+G,MAApB,CAAf,CAA1B;EAEA,YAAMnE,KAAK,GAAGG,aAAa,CAAC,MAAD,EAAS;EAChC6B,UAAAA,KAAK,EAAE,MAAI,CAACmC,MAAL,CAAYC,UAAZ,CAAuBiN,IAAvB,CAA4BrR;EADH,SAAT,CAA3B,CAvBiC;;EA4BjCA,QAAAA,KAAK,CAACmL,SAAN,GAAkBmC,IAAI,CAAClQ,IAAD,CAAtB;EAEAkW,QAAAA,IAAI,CAAC5T,WAAL,CAAiBM,KAAjB;EACAyS,QAAAA,QAAQ,CAAC/S,WAAT,CAAqB4T,IAArB;EACAjC,QAAAA,IAAI,CAAC3R,WAAL,CAAiB+S,QAAjB,EAhCiC;;EAmCjC,YAAMqD,IAAI,GAAG3V,aAAa,CAAC,KAAD,EAAQ;EAC9B8B,UAAAA,EAAE,0BAAmBqL,IAAI,CAACrL,EAAxB,cAA8B7E,IAA9B,CAD4B;EAE9B+E,UAAAA,MAAM,EAAE;EAFsB,SAAR,CAA1B,CAnCiC;;EAyCjC,YAAMqW,UAAU,GAAGrY,aAAa,CAAC,QAAD,EAAW;EACvC/C,UAAAA,IAAI,EAAE,QADiC;EAEvC4E,UAAAA,KAAK,YAAK,MAAI,CAACmC,MAAL,CAAYC,UAAZ,CAAuBwN,OAA5B,cAAuC,MAAI,CAACzN,MAAL,CAAYC,UAAZ,CAAuBwN,OAA9D;EAFkC,SAAX,CAAhC,CAzCiC;;EA+CjC4G,QAAAA,UAAU,CAAC9Y,WAAX,CACIS,aAAa,CACT,MADS,EAET;EACI,yBAAe;EADnB,SAFS,EAKTsL,IAAI,CAACjP,GAAL,CAASY,IAAT,EAAe,MAAI,CAAC+G,MAApB,CALS,CADjB,EA/CiC;;EA0DjCqU,QAAAA,UAAU,CAAC9Y,WAAX,CACIS,aAAa,CACT,MADS,EAET;EACI6B,UAAAA,KAAK,EAAE,MAAI,CAACmC,MAAL,CAAYC,UAAZ,CAAuBjC;EADlC,SAFS,EAKTsJ,IAAI,CAACjP,GAAL,CAAS,UAAT,EAAqB,MAAI,CAAC2H,MAA1B,CALS,CADjB,EA1DiC;;EAqEjC5G,QAAAA,EAAE,CACEuY,IADF,EAEE,SAFF,EAGE,UAAAha,KAAK,EAAI;EACL;EACA,cAAIA,KAAK,CAAC4W,KAAN,KAAgB,EAApB,EAAwB;EACpB;EACH,WAJI;;;EAOL5W,UAAAA,KAAK,CAACiI,cAAN;EACAjI,UAAAA,KAAK,CAAC6W,eAAN,GARK;;EAWLlE,UAAAA,QAAQ,CAACoE,aAAT,CAAuBrV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0C,IAA1C;EACH,SAfH,EAgBE,KAhBF,CAAF,CArEiC;;EAyFjCD,QAAAA,EAAE,CAACib,UAAD,EAAa,OAAb,EAAsB,YAAM;EAC1B/J,UAAAA,QAAQ,CAACoE,aAAT,CAAuBrV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0C,KAA1C;EACH,SAFC,CAAF,CAzFiC;;EA8FjCsY,QAAAA,IAAI,CAACpW,WAAL,CAAiB8Y,UAAjB,EA9FiC;;EAiGjC1C,QAAAA,IAAI,CAACpW,WAAL,CACIS,aAAa,CAAC,KAAD,EAAQ;EACjB0Q,UAAAA,IAAI,EAAE;EADW,SAAR,CADjB;EAMAyH,QAAAA,KAAK,CAAC5Y,WAAN,CAAkBoW,IAAlB;EAEA,QAAA,MAAI,CAACnX,QAAL,CAAc6Q,QAAd,CAAuBN,OAAvB,CAA+B9R,IAA/B,IAAuCqV,QAAvC;EACA,QAAA,MAAI,CAAC9T,QAAL,CAAc6Q,QAAd,CAAuBuG,MAAvB,CAA8B3Y,IAA9B,IAAsC0Y,IAAtC;EACH,OA3GD;EA6GAqB,MAAAA,KAAK,CAACzX,WAAN,CAAkB4Y,KAAlB;EACA1G,MAAAA,OAAO,CAAClS,WAAR,CAAoByX,KAApB;EACAvY,MAAAA,SAAS,CAACc,WAAV,CAAsBkS,OAAtB;EAEA,WAAKjT,QAAL,CAAc6Q,QAAd,CAAuB2H,KAAvB,GAA+BA,KAA/B;EACA,WAAKxY,QAAL,CAAc6Q,QAAd,CAAuB6B,IAAvB,GAA8BO,OAA9B;EACH,KAtQQ;;;EAyQT,QAAI,KAAKzN,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,KAA9B,KAAwC2C,OAAO,CAACU,GAApD,EAAyD;EACrDzH,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;EACH,KA3QQ;;;EA8QT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,SAA9B,KAA4C2C,OAAO,CAACc,OAAxD,EAAiE;EAC7D7H,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;EACH,KAhRQ;;;EAmRT,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3C,UAAMnD,WAAU,GAAG;EACfjE,QAAAA,OAAO,EAAE,GADM;EAEf6c,QAAAA,IAAI,EAAE,KAAKL,QAFI;EAGf5X,QAAAA,MAAM,EAAE;EAHO,OAAnB;EAD2C,UAOnC4X,QAPmC,GAOtB,KAAKjU,MAAL,CAAYuU,IAPU,CAOnCN,QAPmC;;EAS3C,UAAI,CAACpb,EAAE,CAACd,GAAH,CAAOkc,QAAP,CAAD,IAAqB,KAAKO,OAA9B,EAAuC;EACnC9Q,QAAAA,MAAM,CAAChI,WAAD,EAAa;EACf8Q,UAAAA,IAAI,iBAAU,KAAK5K,QAAf,CADW;EAEf0L,UAAAA,KAAK,EAAE,KAAK1L;EAFG,SAAb,CAAN;EAIH;;EAEDnH,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6CqC,WAA7C,CAAtB;EACH,KApSQ;;;EAuST,QAAI,KAAKsE,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;EAC7CpE,MAAAA,SAAS,CAACc,WAAV,CAAsB+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;EACH,KAzSQ;;;EA4ST,QAAI,KAAK2G,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;EAC7C,WAAKrE,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoC+O,QAAQ,CAAC6C,YAAT,CAAsB9T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;EACH;;EAED,SAAKmB,QAAL,CAAc8P,QAAd,GAAyB7P,SAAzB,CAhTS;;EAmTT,QAAI,KAAKkI,OAAT,EAAkB;EACd2H,MAAAA,QAAQ,CAACyH,cAAT,CAAwB1Y,IAAxB,CAA6B,IAA7B,EAAmC+J,KAAK,CAACK,iBAAN,CAAwBpK,IAAxB,CAA6B,IAA7B,CAAnC;EACH;;EAEDiR,IAAAA,QAAQ,CAACsI,YAAT,CAAsBvZ,IAAtB,CAA2B,IAA3B;EAEA,WAAOoB,SAAP;EACH,GAjgDY;EAmgDb;EACAga,EAAAA,MApgDa,oBAogDJ;EAAA;;EACL;EACA,QAAI,KAAKzU,MAAL,CAAY6I,UAAhB,EAA4B;EACxB,UAAM2D,IAAI,GAAGlC,QAAQ,CAACC,UAAT,CAAoBlR,IAApB,CAAyB,IAAzB,CAAb,CADwB;;EAIxB,UAAImT,IAAI,CAAC9B,IAAT,EAAe;EACX7B,QAAAA,UAAU,CAAC2D,IAAI,CAACzU,GAAN,EAAW,aAAX,CAAV;EACH;EACJ,KATI;;;EAYL,SAAK+F,EAAL,GAAUiH,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACa,MAAL,KAAgB,KAA3B,CAAV,CAZK;;EAeL,QAAInL,SAAS,GAAG,IAAhB;EACA,SAAKD,QAAL,CAAc8P,QAAd,GAAyB,IAAzB,CAhBK;;EAmBL,QAAM+C,KAAK,GAAG;EACVvP,MAAAA,EAAE,EAAE,KAAKA,EADC;EAEV4W,MAAAA,QAAQ,EAAE,KAAK1U,MAAL,CAAYuH,QAFZ;EAGVC,MAAAA,KAAK,EAAE,KAAKxH,MAAL,CAAYwH;EAHT,KAAd;EAKA,QAAI0B,MAAM,GAAG,IAAb,CAxBK;;EA2BL,QAAIrQ,EAAE,CAACxB,QAAH,CAAY,KAAK2I,MAAL,CAAYsK,QAAxB,CAAJ,EAAuC;EACnC,WAAKtK,MAAL,CAAYsK,QAAZ,GAAuB,KAAKtK,MAAL,CAAYsK,QAAZ,CAAqBjR,IAArB,CAA0B,KAAKgU,KAA/B,CAAvB;EACH,KA7BI;;;EAgCL,QAAI,CAAC,KAAKrN,MAAL,CAAYsK,QAAjB,EAA2B;EACvB,WAAKtK,MAAL,CAAYsK,QAAZ,GAAuB,EAAvB;EACH;;EAED,QAAIzR,EAAE,CAACpB,OAAH,CAAW,KAAKuI,MAAL,CAAYsK,QAAvB,KAAoCzR,EAAE,CAAChC,MAAH,CAAU,KAAKmJ,MAAL,CAAYsK,QAAtB,CAAxC,EAAyE;EACrE;EACA7P,MAAAA,SAAS,GAAG,KAAKuF,MAAL,CAAYsK,QAAxB;EACH,KAHD,MAGO;EACH;EACA7P,MAAAA,SAAS,GAAG6P,QAAQ,CAAC4J,MAAT,CAAgB7a,IAAhB,CAAqB,IAArB,EAA2B;EACnCyE,QAAAA,EAAE,EAAE,KAAKA,EAD0B;EAEnC4W,QAAAA,QAAQ,EAAE,KAAK1U,MAAL,CAAYuH,QAFa;EAGnCmI,QAAAA,KAAK,EAAE,KAAKA,KAHuB;EAInCtL,QAAAA,OAAO,EAAE,KAAKA,OAJqB;EAKnCkH,QAAAA,QAAQ,EAAEA,QAAQ,CAACwG,QAAT,CAAkBzY,IAAlB,CAAuB,IAAvB,CALyB;EAOnC;;EAPmC,OAA3B,CAAZ;EASA6P,MAAAA,MAAM,GAAG,KAAT;EACH,KAnDI;;;EAsDL,QAAM1L,OAAO,GAAG,SAAVA,OAAU,CAAApJ,KAAK,EAAI;EACrB,UAAIqV,MAAM,GAAGrV,KAAb;EAEAM,MAAAA,MAAM,CAACiH,OAAP,CAAe0R,KAAf,EAAsBrU,OAAtB,CAA8B,iBAAkB;EAAA;EAAA,YAAhB8C,GAAgB;EAAA,YAAXD,KAAW;;EAC5C4N,QAAAA,MAAM,GAAGrD,UAAU,CAACqD,MAAD,aAAa3N,GAAb,QAAqBD,KAArB,CAAnB;EACH,OAFD;EAIA,aAAO4N,MAAP;EACH,KARD,CAtDK;;;EAiEL,QAAIP,MAAJ,EAAY;EACR,UAAIrQ,EAAE,CAAChC,MAAH,CAAU,KAAKmJ,MAAL,CAAYsK,QAAtB,CAAJ,EAAqC;EACjC7P,QAAAA,SAAS,GAAG+C,OAAO,CAAC/C,SAAD,CAAnB;EACH,OAFD,MAEO,IAAI5B,EAAE,CAACpB,OAAH,CAAWgD,SAAX,CAAJ,EAA2B;EAC9BA,QAAAA,SAAS,CAACuM,SAAV,GAAsBxJ,OAAO,CAAC/C,SAAS,CAACuM,SAAX,CAA7B;EACH;EACJ,KAvEI;;;EA0EL,QAAI3K,MAAJ,CA1EK;;EA6EL,QAAIxD,EAAE,CAAChC,MAAH,CAAU,KAAKmJ,MAAL,CAAY8K,SAAZ,CAAsBR,QAAtB,CAA+B7P,SAAzC,CAAJ,EAAyD;EACrD4B,MAAAA,MAAM,GAAGH,QAAQ,CAAC+C,aAAT,CAAuB,KAAKe,MAAL,CAAY8K,SAAZ,CAAsBR,QAAtB,CAA+B7P,SAAtD,CAAT;EACH,KA/EI;;;EAkFL,QAAI,CAAC5B,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,MAAAA,MAAM,GAAG,KAAK7B,QAAL,CAAcC,SAAvB;EACH,KApFI;;;EAuFL,QAAMka,YAAY,GAAG9b,EAAE,CAACpB,OAAH,CAAWgD,SAAX,IAAwB,uBAAxB,GAAkD,oBAAvE;EACA4B,IAAAA,MAAM,CAACsY,YAAD,CAAN,CAAqB,YAArB,EAAmCla,SAAnC,EAxFK;;EA2FL,QAAI,CAAC5B,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8P,QAAzB,CAAL,EAAyC;EACrCA,MAAAA,QAAQ,CAACO,YAAT,CAAsBxR,IAAtB,CAA2B,IAA3B;EACH,KA7FI;;;EAgGL,QAAI,CAACR,EAAE,CAACb,KAAH,CAAS,KAAKwC,QAAL,CAAcuQ,OAAvB,CAAL,EAAsC;EAClC,UAAM6J,WAAW,GAAG,SAAdA,WAAc,CAAAlH,MAAM,EAAI;EAC1B,YAAMnQ,SAAS,GAAG,OAAI,CAACyC,MAAL,CAAYC,UAAZ,CAAuB4U,cAAzC;EACAngB,QAAAA,MAAM,CAAC0D,cAAP,CAAsBsV,MAAtB,EAA8B,SAA9B,EAAyC;EACrC0B,UAAAA,UAAU,EAAE,IADyB;EAErC/W,UAAAA,GAFqC,iBAE/B;EACF,mBAAOoG,QAAQ,CAACiP,MAAD,EAASnQ,SAAT,CAAf;EACH,WAJoC;EAKrCqG,UAAAA,GALqC,iBAKhB;EAAA,gBAAjBqM,OAAiB,uEAAP,KAAO;EACjB9R,YAAAA,WAAW,CAACuP,MAAD,EAASnQ,SAAT,EAAoB0S,OAApB,CAAX;EACH;EAPoC,SAAzC;EASH,OAXD,CADkC;;;EAelCvb,MAAAA,MAAM,CAACoe,MAAP,CAAc,KAAKtY,QAAL,CAAcuQ,OAA5B,EACKnP,MADL,CACYrH,OADZ,EAEKyE,OAFL,CAEa,UAAA0U,MAAM,EAAI;EACf,YAAI7U,EAAE,CAACvB,KAAH,CAASoW,MAAT,KAAoB7U,EAAE,CAACrB,QAAH,CAAYkW,MAAZ,CAAxB,EAA6C;EACzCtY,UAAAA,KAAK,CAAC0F,IAAN,CAAW4S,MAAX,EAAmB9R,MAAnB,CAA0BrH,OAA1B,EAAmCyE,OAAnC,CAA2C4b,WAA3C;EACH,SAFD,MAEO;EACHA,UAAAA,WAAW,CAAClH,MAAD,CAAX;EACH;EACJ,OARL;EASH,KAxHI;;;EA2HL,QAAIxX,MAAM,CAACgL,SAAP,CAAiBC,SAAjB,CAA2BtC,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;EAC7C6B,MAAAA,OAAO,CAACrE,MAAD,CAAP;EACH,KA7HI;;;EAgIL,QAAI,KAAK2D,MAAL,CAAY0Q,QAAZ,CAAqBpG,QAAzB,EAAmC;EAAA,yBACG,KAAKtK,MADR;EAAA,UACvBC,UADuB,gBACvBA,UADuB;EAAA,UACX6K,SADW,gBACXA,SADW;EAE/B,UAAMzN,QAAQ,aAAMyN,SAAS,CAACR,QAAV,CAAmB1P,OAAzB,cAAoCkQ,SAAS,CAACgK,MAA9C,eAAyD7U,UAAU,CAACjC,MAApE,CAAd;EACA,UAAM8W,MAAM,GAAG/V,WAAW,CAAC1F,IAAZ,CAAiB,IAAjB,EAAuBgE,QAAvB,CAAf;EAEAjI,MAAAA,KAAK,CAAC0F,IAAN,CAAWga,MAAX,EAAmB9b,OAAnB,CAA2B,UAAAsU,KAAK,EAAI;EAChCnP,QAAAA,WAAW,CAACmP,KAAD,EAAQ,OAAI,CAACtN,MAAL,CAAYC,UAAZ,CAAuBjC,MAA/B,EAAuC,KAAvC,CAAX;EACAG,QAAAA,WAAW,CAACmP,KAAD,EAAQ,OAAI,CAACtN,MAAL,CAAYC,UAAZ,CAAuB+L,OAA/B,EAAwC,IAAxC,CAAX;EACH,OAHD;EAIH;EACJ;EA9oDY,CAAjB;;ECfA;;;;;;AAKA,EAAO,SAAS+I,QAAT,CAAkB3gB,KAAlB,EAAsC;EAAA,MAAb4gB,IAAa,uEAAN,IAAM;EACzC,MAAIjd,GAAG,GAAG3D,KAAV;;EAEA,MAAI4gB,IAAJ,EAAU;EACN,QAAMC,MAAM,GAAG/Y,QAAQ,CAACF,aAAT,CAAuB,GAAvB,CAAf;EACAiZ,IAAAA,MAAM,CAACX,IAAP,GAAcvc,GAAd;EACAA,IAAAA,GAAG,GAAGkd,MAAM,CAACX,IAAb;EACH;;EAED,MAAI;EACA,WAAO,IAAI1d,GAAJ,CAAQmB,GAAR,CAAP;EACH,GAFD,CAEE,OAAOf,CAAP,EAAU;EACR,WAAO,IAAP;EACH;EACJ;;AAGD,EAAO,SAASke,cAAT,CAAwB9gB,KAAxB,EAA+B;EAClC,MAAM+gB,MAAM,GAAG,IAAIC,eAAJ,EAAf;;EAEA,MAAIvc,EAAE,CAAC3B,MAAH,CAAU9C,KAAV,CAAJ,EAAsB;EAClBM,IAAAA,MAAM,CAACiH,OAAP,CAAevH,KAAf,EAAsB4E,OAAtB,CAA8B,gBAAkB;EAAA;EAAA,UAAhB8C,GAAgB;EAAA,UAAXD,KAAW;;EAC5CsZ,MAAAA,MAAM,CAACvR,GAAP,CAAW9H,GAAX,EAAgBD,KAAhB;EACH,KAFD;EAGH;;EAED,SAAOsZ,MAAP;EACH;;ECdD,IAAM7J,QAAQ,GAAG;EACb;EACA+J,EAAAA,KAFa,mBAEL;EACJ;EACA,QAAI,CAAC,KAAKnd,SAAL,CAAe8J,EAApB,EAAwB;EACpB;EACH,KAJG;;;EAOJ,QAAI,CAAC,KAAKsT,OAAN,IAAiB,KAAKC,SAAtB,IAAoC,KAAK5S,OAAL,IAAgB,CAACnB,OAAO,CAACsB,UAAjE,EAA8E;EAC1E;EACA,UACIjK,EAAE,CAACvB,KAAH,CAAS,KAAK0I,MAAL,CAAYsK,QAArB,KACA,KAAKtK,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CADA,IAEA,KAAKmB,MAAL,CAAYqL,QAAZ,CAAqBxM,QAArB,CAA8B,UAA9B,CAHJ,EAIE;EACEyL,QAAAA,QAAQ,CAACgI,eAAT,CAAyBjZ,IAAzB,CAA8B,IAA9B;EACH;;EAED;EACH,KAlBG;;;EAqBJ,QAAI,CAACR,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8Q,QAAzB,CAAL,EAAyC;EACrC,WAAK9Q,QAAL,CAAc8Q,QAAd,GAAyBtP,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBQ,QAAvB,CAAjC,CAAtC;EAEAlP,MAAAA,WAAW,CAAC,KAAK5B,QAAL,CAAc8Q,QAAf,EAAyB,KAAK9Q,QAAL,CAAcI,OAAvC,CAAX;EACH,KAzBG;EA4BJ;;;EACA,QAAIgG,OAAO,CAACC,IAAR,IAAgB3K,MAAM,CAACU,GAA3B,EAAgC;EAC5B,UAAM4D,QAAQ,GAAG,KAAKoI,KAAL,CAAWhE,gBAAX,CAA4B,OAA5B,CAAjB;EAEAxJ,MAAAA,KAAK,CAAC0F,IAAN,CAAWN,QAAX,EAAqBxB,OAArB,CAA6B,UAAAlB,KAAK,EAAI;EAClC,YAAMmM,GAAG,GAAGnM,KAAK,CAAC0L,YAAN,CAAmB,KAAnB,CAAZ;EACA,YAAMzL,GAAG,GAAGgd,QAAQ,CAAC9Q,GAAD,CAApB;;EAEA,YACIlM,GAAG,KAAK,IAAR,IACAA,GAAG,CAAChB,QAAJ,KAAiBb,MAAM,CAACuU,QAAP,CAAgB6J,IAAhB,CAAqBvd,QADtC,IAEA,CAAC,OAAD,EAAU,QAAV,EAAoB8H,QAApB,CAA6B9G,GAAG,CAACyd,QAAjC,CAHJ,EAIE;EACEtN,UAAAA,KAAK,CAACjE,GAAD,EAAM,MAAN,CAAL,CACKvJ,IADL,CACU,UAAA+a,IAAI,EAAI;EACV3d,YAAAA,KAAK,CAACiE,YAAN,CAAmB,KAAnB,EAA0B7F,MAAM,CAACU,GAAP,CAAW8e,eAAX,CAA2BD,IAA3B,CAA1B;EACH,WAHL,EAIK/L,KAJL,CAIW,YAAM;EACTnN,YAAAA,aAAa,CAACzE,KAAD,CAAb;EACH,WANL;EAOH;EACJ,OAjBD;EAkBH,KAlDG;EAqDJ;EACA;EACA;EACA;EACA;;;EAEA,QAAM6d,gBAAgB,GAAGzU,SAAS,CAAC0U,SAAV,IAAuB,CAAC1U,SAAS,CAACwR,QAAV,IAAsBxR,SAAS,CAAC2U,YAAhC,IAAgD,IAAjD,CAAhD;EACA,QAAMD,SAAS,GAAGnR,MAAM,CAACkR,gBAAgB,CAACtX,GAAjB,CAAqB,UAAAqU,QAAQ;EAAA,aAAIA,QAAQ,CAAC3Z,KAAT,CAAe,GAAf,EAAoB,CAApB,CAAJ;EAAA,KAA7B,CAAD,CAAxB;EAEA,QAAI2Z,QAAQ,GAAG,CAAC,KAAK/K,OAAL,CAAatP,GAAb,CAAiB,UAAjB,KAAgC,KAAK2H,MAAL,CAAYsL,QAAZ,CAAqBoH,QAArD,IAAiE,MAAlE,EAA0EjM,WAA1E,EAAf,CA9DI;;EAiEJ,QAAIiM,QAAQ,KAAK,MAAjB,EAAyB;EAAA,sCACRkD,SADQ;;EACpBlD,MAAAA,QADoB;EAExB;;EAED,QAAIoD,MAAM,GAAG,KAAKnO,OAAL,CAAatP,GAAb,CAAiB,UAAjB,CAAb;;EACA,QAAI,CAACQ,EAAE,CAACzB,OAAH,CAAW0e,MAAX,CAAL,EAAyB;EAClBA,MAAAA,MADkB,GACP,KAAK9V,MAAL,CAAYsL,QADL,CAClBwK,MADkB;EAExB;;EAEDphB,IAAAA,MAAM,CAACqF,MAAP,CAAc,KAAKuR,QAAnB,EAA6B;EACzBmH,MAAAA,OAAO,EAAE,KADgB;EAEzBqD,MAAAA,MAAM,EAANA,MAFyB;EAGzBpD,MAAAA,QAAQ,EAARA,QAHyB;EAIzBkD,MAAAA,SAAS,EAATA;EAJyB,KAA7B,EA1EI;;EAkFJ,QAAI,KAAKjT,OAAT,EAAkB;EACd,UAAMoT,WAAW,GAAG,KAAK/V,MAAL,CAAYsL,QAAZ,CAAqBpC,MAArB,GAA8B,sBAA9B,GAAuD,aAA3E;EACA9P,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKuJ,KAAL,CAAWE,UAAzB,EAAqCiT,WAArC,EAAkDzK,QAAQ,CAACpC,MAAT,CAAgBsG,IAAhB,CAAqB,IAArB,CAAlD;EACH,KArFG;;;EAwFJjV,IAAAA,UAAU,CAAC+Q,QAAQ,CAACpC,MAAT,CAAgBsG,IAAhB,CAAqB,IAArB,CAAD,EAA6B,CAA7B,CAAV;EACH,GA3FY;EA6Fb;EACAtG,EAAAA,MA9Fa,oBA8FJ;EAAA;;EACL,QAAMqJ,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,EAA8B,IAA9B,CAAf,CADK;;EAAA,yBAGgD,KAAKiS,QAHrD;EAAA,QAGGwK,MAHH,kBAGGA,MAHH;EAAA,QAGWpD,QAHX,kBAGWA,QAHX;EAAA,QAGqBsD,IAHrB,kBAGqBA,IAHrB;EAAA,QAG2BC,gBAH3B,kBAG2BA,gBAH3B;EAIL,QAAMC,cAAc,GAAG3hB,OAAO,CAACge,MAAM,CAAChS,IAAP,CAAY,UAAAzI,KAAK;EAAA,aAAIA,KAAK,CAAC4a,QAAN,KAAmBA,QAAvB;EAAA,KAAjB,CAAD,CAA9B,CAJK;;EAOL,QAAI,KAAK/P,OAAL,IAAgB,KAAK2S,OAAzB,EAAkC;EAC9B/C,MAAAA,MAAM,CAAC3W,MAAP,CAAc,UAAA9D,KAAK;EAAA,eAAI,CAACke,IAAI,CAAC3d,GAAL,CAASP,KAAT,CAAL;EAAA,OAAnB,EAAyCkB,OAAzC,CAAiD,UAAAlB,KAAK,EAAI;EACtD,QAAA,KAAI,CAACyM,KAAL,CAAWC,GAAX,CAAe,aAAf,EAA8B1M,KAA9B,EADsD;;;EAGtDke,QAAAA,IAAI,CAACpS,GAAL,CAAS9L,KAAT,EAAgB;EACZ+Z,UAAAA,OAAO,EAAE/Z,KAAK,CAACqe,IAAN,KAAe;EADZ,SAAhB,EAHsD;;EAQtDre,QAAAA,KAAK,CAACqe,IAAN,GAAa,QAAb,CARsD;;EAWtD/c,QAAAA,EAAE,CAACC,IAAH,CAAQ,KAAR,EAAcvB,KAAd,EAAqB,WAArB,EAAkC;EAAA,iBAAMwT,QAAQ,CAAC8K,UAAT,CAAoB/c,IAApB,CAAyB,KAAzB,CAAN;EAAA,SAAlC;EACH,OAZD;EAaH,KArBI;;;EAwBL,QAAK6c,cAAc,IAAI,KAAKxD,QAAL,KAAkBA,QAArC,IAAkD,CAACH,MAAM,CAAC1T,QAAP,CAAgBoX,gBAAhB,CAAvD,EAA0F;EACtF3K,MAAAA,QAAQ,CAAC+K,WAAT,CAAqBhd,IAArB,CAA0B,IAA1B,EAAgCqZ,QAAhC;EACApH,MAAAA,QAAQ,CAAC5S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2Byc,MAAM,IAAII,cAArC;EACH,KA3BI;;;EA8BL/X,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBqL,QAAvB,CAAgC5D,OAA1D,EAAmE,CAAC7O,EAAE,CAACb,KAAH,CAASua,MAAT,CAApE,CAAX,CA9BK;;EAiCL,QAAI,CAAC,KAAKvS,MAAL,CAAYsK,QAAZ,IAAwB,EAAzB,EAA6BzL,QAA7B,CAAsC,UAAtC,KAAqD,KAAKmB,MAAL,CAAYqL,QAAZ,CAAqBxM,QAArB,CAA8B,UAA9B,CAAzD,EAAoG;EAChGyL,MAAAA,QAAQ,CAACgI,eAAT,CAAyBjZ,IAAzB,CAA8B,IAA9B;EACH;EACJ,GAlIY;EAoIb;EACA;EACAX,EAAAA,MAtIa,kBAsINtE,KAtIM,EAsIiB;EAAA,QAAhBuE,OAAgB,uEAAN,IAAM;;EAC1B;EACA,QAAI,CAAC,KAAKT,SAAL,CAAe8J,EAApB,EAAwB;EACpB;EACH;;EAJyB,QAMlByQ,OANkB,GAMN,KAAKnH,QANC,CAMlBmH,OANkB;;EAO1B,QAAM6D,WAAW,GAAG,KAAKtW,MAAL,CAAYC,UAAZ,CAAuBqL,QAAvB,CAAgCwK,MAApD,CAP0B;EAU1B;;EACA,QAAMA,MAAM,GAAGjd,EAAE,CAAC5B,eAAH,CAAmB7C,KAAnB,IAA4B,CAACqe,OAA7B,GAAuCre,KAAtD,CAX0B;;EAc1B,QAAI0hB,MAAM,KAAKrD,OAAf,EAAwB;EACpB;EACA,UAAI,CAAC9Z,OAAL,EAAc;EACV,aAAK2S,QAAL,CAAcwK,MAAd,GAAuBA,MAAvB;EACA,aAAKnO,OAAL,CAAa/D,GAAb,CAAiB;EAAE0H,UAAAA,QAAQ,EAAEwK;EAAZ,SAAjB;EACH,OALmB;;;EAQpB,UAAI,CAAC,KAAKpD,QAAN,IAAkBoD,MAAlB,IAA4B,CAACnd,OAAjC,EAA0C;EACtC,YAAM4Z,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,YAAMvB,KAAK,GAAGwT,QAAQ,CAACiL,SAAT,CAAmBld,IAAnB,CAAwB,IAAxB,GAA+B,KAAKiS,QAAL,CAAcoH,QAA7C,4BAA0D,KAAKpH,QAAL,CAAcsK,SAAxE,IAAoF,IAApF,CAAd,CAFsC;;EAKtC,aAAKtK,QAAL,CAAcoH,QAAd,GAAyB5a,KAAK,CAAC4a,QAA/B,CALsC;;EAQtCpH,QAAAA,QAAQ,CAAC1H,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwBkZ,MAAM,CAAC7N,OAAP,CAAe5M,KAAf,CAAxB;EACA;EACH,OAlBmB;;;EAqBpB,UAAI,KAAK0C,QAAL,CAAcuQ,OAAd,CAAsBO,QAA1B,EAAoC;EAChC,aAAK9Q,QAAL,CAAcuQ,OAAd,CAAsBO,QAAtB,CAA+B2E,OAA/B,GAAyC6F,MAAzC;EACH,OAvBmB;;;EA0BpB3X,MAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B6b,WAA1B,EAAuCR,MAAvC,CAAX;EAEA,WAAKxK,QAAL,CAAcmH,OAAd,GAAwBqD,MAAxB,CA5BoB;;EA+BpBxL,MAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC,EA/BoB;;EAkCpBM,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCkT,MAAM,GAAG,iBAAH,GAAuB,kBAAjE;EACH;EACJ,GAxLY;EA0Lb;EACA;EACAlS,EAAAA,GA5La,eA4LT5I,KA5LS,EA4Lc;EAAA,QAAhBrC,OAAgB,uEAAN,IAAM;EACvB,QAAM4Z,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,CAAf,CADuB;;EAIvB,QAAI2B,KAAK,KAAK,CAAC,CAAf,EAAkB;EACdsQ,MAAAA,QAAQ,CAAC5S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,KAA3B,EAAkCV,OAAlC;EACA;EACH;;EAED,QAAI,CAACE,EAAE,CAAC1B,MAAH,CAAU6D,KAAV,CAAL,EAAuB;EACnB,WAAKuJ,KAAL,CAAW2H,IAAX,CAAgB,0BAAhB,EAA4ClR,KAA5C;EACA;EACH;;EAED,QAAI,EAAEA,KAAK,IAAIuX,MAAX,CAAJ,EAAwB;EACpB,WAAKhO,KAAL,CAAW2H,IAAX,CAAgB,iBAAhB,EAAmClR,KAAnC;EACA;EACH;;EAED,QAAI,KAAKsQ,QAAL,CAAcmE,YAAd,KAA+BzU,KAAnC,EAA0C;EACtC,WAAKsQ,QAAL,CAAcmE,YAAd,GAA6BzU,KAA7B;EACA,UAAMlD,KAAK,GAAGya,MAAM,CAACvX,KAAD,CAApB;;EAFsC,iBAGjBlD,KAAK,IAAI,EAHQ;EAAA,UAG9B4a,QAH8B,QAG9BA,QAH8B;;;EAMtC,WAAKpH,QAAL,CAAc2K,gBAAd,GAAiCne,KAAjC,CANsC;;EAStCwS,MAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC,EATsC;;EAYtC,UAAI,CAACV,OAAL,EAAc;EACV,aAAK2S,QAAL,CAAcoH,QAAd,GAAyBA,QAAzB;EACA,aAAK/K,OAAL,CAAa/D,GAAb,CAAiB;EAAE8O,UAAAA,QAAQ,EAARA;EAAF,SAAjB;EACH,OAfqC;;;EAkBtC,UAAI,KAAKG,OAAT,EAAkB;EACd,aAAK2D,KAAL,CAAWC,eAAX,CAA2B/D,QAA3B;EACH,OApBqC;;;EAuBtC/Y,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoC,gBAApC;EACH,KA3CsB;;;EA8CvB0I,IAAAA,QAAQ,CAAC5S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,IAA3B,EAAiCV,OAAjC;;EAEA,QAAI,KAAKgK,OAAL,IAAgB,KAAK2S,OAAzB,EAAkC;EAC9B;EACAhK,MAAAA,QAAQ,CAAC8K,UAAT,CAAoB/c,IAApB,CAAyB,IAAzB;EACH;EACJ,GAhPY;EAkPb;EACA;EACAgd,EAAAA,WApPa,uBAoPDjiB,KApPC,EAoPsB;EAAA,QAAhBuE,OAAgB,uEAAN,IAAM;;EAC/B,QAAI,CAACE,EAAE,CAAChC,MAAH,CAAUzC,KAAV,CAAL,EAAuB;EACnB,WAAKmQ,KAAL,CAAW2H,IAAX,CAAgB,2BAAhB,EAA6C9X,KAA7C;EACA;EACH,KAJ8B;;;EAM/B,QAAMse,QAAQ,GAAGte,KAAK,CAACqS,WAAN,EAAjB;EACA,SAAK6E,QAAL,CAAcoH,QAAd,GAAyBA,QAAzB,CAP+B;;EAU/B,QAAMH,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,QAAMvB,KAAK,GAAGwT,QAAQ,CAACiL,SAAT,CAAmBld,IAAnB,CAAwB,IAAxB,EAA8B,CAACqZ,QAAD,CAA9B,CAAd;EACApH,IAAAA,QAAQ,CAAC1H,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwBkZ,MAAM,CAAC7N,OAAP,CAAe5M,KAAf,CAAxB,EAA+Ca,OAA/C;EACH,GAjQY;EAmQb;EACA;EACA;EACA6Z,EAAAA,SAtQa,uBAsQa;EAAA;;EAAA,QAAhBtJ,MAAgB,uEAAP,KAAO;EACtB;EACA,QAAMqJ,MAAM,GAAGnd,KAAK,CAAC0F,IAAN,CAAW,CAAC,KAAK8H,KAAL,IAAc,EAAf,EAAmBE,UAAnB,IAAiC,EAA5C,CAAf,CAFsB;EAItB;;EACA,WAAOyP,MAAM,CACR3W,MADE,CACK,UAAA9D,KAAK;EAAA,aAAI,CAAC,MAAI,CAAC6K,OAAN,IAAiBuG,MAAjB,IAA2B,MAAI,CAACoC,QAAL,CAAc0K,IAAd,CAAmBU,GAAnB,CAAuB5e,KAAvB,CAA/B;EAAA,KADV,EAEF8D,MAFE,CAEK,UAAA9D,KAAK;EAAA,aAAI,CAAC,UAAD,EAAa,WAAb,EAA0B+G,QAA1B,CAAmC/G,KAAK,CAACvB,IAAzC,CAAJ;EAAA,KAFV,CAAP;EAGH,GA9QY;EAgRb;EACAggB,EAAAA,SAjRa,qBAiRHX,SAjRG,EAiRuB;EAAA;;EAAA,QAAfxX,KAAe,uEAAP,KAAO;EAChC,QAAMmU,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,CAAf;;EACA,QAAMsd,aAAa,GAAG,SAAhBA,aAAgB,CAAA7e,KAAK;EAAA,aAAIlD,MAAM,CAAC,CAAC,MAAI,CAAC0W,QAAL,CAAc0K,IAAd,CAAmB3d,GAAnB,CAAuBP,KAAvB,KAAiC,EAAlC,EAAsC+Z,OAAvC,CAAV;EAAA,KAA3B;;EACA,QAAM+E,MAAM,GAAGxhB,KAAK,CAAC0F,IAAN,CAAWyX,MAAX,EAAmBL,IAAnB,CAAwB,UAACC,CAAD,EAAIC,CAAJ;EAAA,aAAUuE,aAAa,CAACvE,CAAD,CAAb,GAAmBuE,aAAa,CAACxE,CAAD,CAA1C;EAAA,KAAxB,CAAf;EACA,QAAIra,KAAJ;EACA8d,IAAAA,SAAS,CAACiB,KAAV,CAAgB,UAAAnE,QAAQ,EAAI;EACxB5a,MAAAA,KAAK,GAAG8e,MAAM,CAACrW,IAAP,CAAY,UAAAzI,KAAK;EAAA,eAAIA,KAAK,CAAC4a,QAAN,KAAmBA,QAAvB;EAAA,OAAjB,CAAR;EACA,aAAO,CAAC5a,KAAR,CAFwB;EAG3B,KAHD,EALgC;;EAUhC,WAAOA,KAAK,KAAKsG,KAAK,GAAGwY,MAAM,CAAC,CAAD,CAAT,GAAenW,SAAzB,CAAZ;EACH,GA5RY;EA8Rb;EACAqW,EAAAA,eA/Ra,6BA+RK;EACd,WAAOxL,QAAQ,CAACkH,SAAT,CAAmBnZ,IAAnB,CAAwB,IAAxB,EAA8B,KAAKoW,YAAnC,CAAP;EACH,GAjSY;EAmSb;EACAqC,EAAAA,QApSa,oBAoSJha,KApSI,EAoSG;EACZ,QAAI2X,YAAY,GAAG3X,KAAnB;;EAEA,QAAI,CAACe,EAAE,CAACf,KAAH,CAAS2X,YAAT,CAAD,IAA2BjO,OAAO,CAACsB,UAAnC,IAAiD,KAAKwI,QAAL,CAAcmH,OAAnE,EAA4E;EACxEhD,MAAAA,YAAY,GAAGnE,QAAQ,CAACwL,eAAT,CAAyBzd,IAAzB,CAA8B,IAA9B,CAAf;EACH;;EAED,QAAIR,EAAE,CAACf,KAAH,CAAS2X,YAAT,CAAJ,EAA4B;EACxB,UAAI,CAAC5W,EAAE,CAACb,KAAH,CAASyX,YAAY,CAACnC,KAAtB,CAAL,EAAmC;EAC/B,eAAOmC,YAAY,CAACnC,KAApB;EACH;;EAED,UAAI,CAACzU,EAAE,CAACb,KAAH,CAASyX,YAAY,CAACiD,QAAtB,CAAL,EAAsC;EAClC,eAAO5a,KAAK,CAAC4a,QAAN,CAAenM,WAAf,EAAP;EACH;;EAED,aAAOe,IAAI,CAACjP,GAAL,CAAS,SAAT,EAAoB,KAAK2H,MAAzB,CAAP;EACH;;EAED,WAAOsH,IAAI,CAACjP,GAAL,CAAS,UAAT,EAAqB,KAAK2H,MAA1B,CAAP;EACH,GAxTY;EA0Tb;EACA;EACAoW,EAAAA,UA5Ta,sBA4TFhiB,KA5TE,EA4TK;EACd;EACA,QAAI,CAAC,KAAK8D,SAAL,CAAe8J,EAApB,EAAwB;EACpB;EACH;;EAED,QAAI,CAACnJ,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8Q,QAAzB,CAAL,EAAyC;EACrC,WAAK/G,KAAL,CAAW2H,IAAX,CAAgB,kCAAhB;EACA;EACH,KATa;;;EAYd,QAAI,CAACrT,EAAE,CAAC5B,eAAH,CAAmB7C,KAAnB,CAAD,IAA8B,CAACgB,KAAK,CAACD,OAAN,CAAcf,KAAd,CAAnC,EAAyD;EACrD,WAAKmQ,KAAL,CAAW2H,IAAX,CAAgB,2BAAhB,EAA6C9X,KAA7C;EACA;EACH;;EAED,QAAI2iB,IAAI,GAAG3iB,KAAX,CAjBc;;EAoBd,QAAI,CAAC2iB,IAAL,EAAW;EACP,UAAMjf,KAAK,GAAGwT,QAAQ,CAACwL,eAAT,CAAyBzd,IAAzB,CAA8B,IAA9B,CAAd;EACA0d,MAAAA,IAAI,GAAG3hB,KAAK,CAAC0F,IAAN,CAAW,CAAChD,KAAK,IAAI,EAAV,EAAckf,UAAd,IAA4B,EAAvC,EACF3Y,GADE,CACE,UAAAxG,GAAG;EAAA,eAAIA,GAAG,CAACof,YAAJ,EAAJ;EAAA,OADL,EAEF5Y,GAFE,CAEE6I,OAFF,CAAP;EAGH,KAzBa;;;EA4Bd,QAAMsC,OAAO,GAAGuN,IAAI,CAAC1Y,GAAL,CAAS,UAAA6Y,OAAO;EAAA,aAAIA,OAAO,CAAC5Z,IAAR,EAAJ;EAAA,KAAhB,EAAoCyP,IAApC,CAAyC,IAAzC,CAAhB;EACA,QAAMoK,OAAO,GAAG3N,OAAO,KAAK,KAAKhP,QAAL,CAAc8Q,QAAd,CAAuBtE,SAAnD;;EAEA,QAAImQ,OAAJ,EAAa;EACT;EACA1a,MAAAA,YAAY,CAAC,KAAKjC,QAAL,CAAc8Q,QAAf,CAAZ;EACA,UAAM8L,OAAO,GAAGpb,aAAa,CAAC,MAAD,EAASgB,yBAAyB,CAAC,KAAKgD,MAAL,CAAY8K,SAAZ,CAAsBsM,OAAvB,CAAlC,CAA7B;EACAA,MAAAA,OAAO,CAACpQ,SAAR,GAAoBwC,OAApB;EACA,WAAKhP,QAAL,CAAc8Q,QAAd,CAAuB/P,WAAvB,CAAmC6b,OAAnC,EALS;;EAQTzd,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoC,WAApC;EACH;EACJ;EArWY,CAAjB;;ECxBA;EACA;EACA;EAEA,IAAMyU,QAAQ,GAAG;EACb;EACA3P,EAAAA,OAAO,EAAE,IAFI;EAIb;EACAF,EAAAA,KAAK,EAAE,EALM;EAOb;EACAjD,EAAAA,KAAK,EAAE,KARM;EAUb;EACA+S,EAAAA,QAAQ,EAAE,KAXG;EAab;EACAC,EAAAA,SAAS,EAAE,IAdE;EAgBb;EACA;EACA1V,EAAAA,WAAW,EAAE,IAlBA;EAoBb;EACA0F,EAAAA,QAAQ,EAAE,EArBG;EAuBb;EACAoE,EAAAA,MAAM,EAAE,CAxBK;EAyBbqE,EAAAA,KAAK,EAAE,KAzBM;EA2Bb;EACAlE,EAAAA,QAAQ,EAAE,IA5BG;EA8Bb;EACA;EACAyF,EAAAA,eAAe,EAAE,IAhCJ;EAkCb;EACAJ,EAAAA,UAAU,EAAE,IAnCC;EAqCb;EACAqG,EAAAA,YAAY,EAAE,IAtCD;EAwCb;EACAC,EAAAA,KAAK,EAAE,MAzCM;EA2Cb;EACAC,EAAAA,WAAW,EAAE,IA5CA;EA8Cb;EACAC,EAAAA,YAAY,EAAE,IA/CD;EAiDb;EACAC,EAAAA,UAAU,EAAE,KAlDC;EAoDb;EACAC,EAAAA,kBAAkB,EAAE,IArDP;EAuDb;EACAhP,EAAAA,UAAU,EAAE,IAxDC;EAyDb0D,EAAAA,UAAU,EAAE,MAzDC;EA0Db/B,EAAAA,OAAO,EAAE,oCA1DI;EA4Db;EACAlG,EAAAA,UAAU,EAAE,sCA7DC;EA+Db;EACAF,EAAAA,OAAO,EAAE;EACLyN,IAAAA,OAAO,EAAE,GADJ;EAEL1Z,IAAAA,OAAO,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,GAA/B,EAAoC,GAApC,EAAyC,GAAzC,EAA8C,GAA9C,EAAmD,GAAnD;EAFJ,GAhEI;EAqEb;EACA2f,EAAAA,IAAI,EAAE;EACFhC,IAAAA,MAAM,EAAE,KADN;EAGF;;EAHE,GAtEO;EA4Eb;EACApG,EAAAA,KAAK,EAAE;EACHqI,IAAAA,QAAQ,EAAE,CADP;EAEH5f,IAAAA,OAAO,EAAE,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC;EAFN,GA7EM;EAkFb;EACA6f,EAAAA,QAAQ,EAAE;EACNxY,IAAAA,OAAO,EAAE,IADH;EAENyY,IAAAA,MAAM,EAAE;EAFF,GAnFG;EAwFb;EACAvH,EAAAA,QAAQ,EAAE;EACNpG,IAAAA,QAAQ,EAAE,KADJ;EAENoB,IAAAA,IAAI,EAAE;EAFA,GAzFG;EA8Fb;EACAJ,EAAAA,QAAQ,EAAE;EACNwK,IAAAA,MAAM,EAAE,KADF;EAENpD,IAAAA,QAAQ,EAAE,MAFJ;EAGN;EACA;EACAxJ,IAAAA,MAAM,EAAE;EALF,GA/FG;EAuGb;EACAqC,EAAAA,UAAU,EAAE;EACR7D,IAAAA,OAAO,EAAE,IADD;EACO;EACfwQ,IAAAA,QAAQ,EAAE,IAFF;EAEQ;EAChBC,IAAAA,SAAS,EAAE,KAHH;;EAAA,GAxGC;EA8Gb;EACAxQ,EAAAA,OAAO,EAAE;EACLD,IAAAA,OAAO,EAAE,IADJ;EAEL5L,IAAAA,GAAG,EAAE;EAFA,GA/GI;EAoHb;EACAwO,EAAAA,QAAQ,EAAE,CACN,YADM;EAGN;EACA,QAJM;EAMN,YANM,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM;EAeN,cAfM,CArHG;EAsIbe,EAAAA,QAAQ,EAAE,CAAC,UAAD,EAAa,SAAb,EAAwB,OAAxB,CAtIG;EAwIb;EACA/D,EAAAA,IAAI,EAAE;EACF2D,IAAAA,OAAO,EAAE,SADP;EAEFC,IAAAA,MAAM,EAAE,oBAFN;EAGFhH,IAAAA,IAAI,EAAE,MAHJ;EAIF8G,IAAAA,KAAK,EAAE,OAJL;EAKFG,IAAAA,WAAW,EAAE,qBALX;EAMFO,IAAAA,IAAI,EAAE,MANJ;EAOF0M,IAAAA,SAAS,EAAE,6BAPT;EAQFlK,IAAAA,MAAM,EAAE,QARN;EASFoC,IAAAA,QAAQ,EAAE,UATR;EAUFzM,IAAAA,WAAW,EAAE,cAVX;EAWFiI,IAAAA,QAAQ,EAAE,UAXR;EAYFH,IAAAA,MAAM,EAAE,QAZN;EAaFP,IAAAA,IAAI,EAAE,MAbJ;EAcFiN,IAAAA,MAAM,EAAE,QAdN;EAeFC,IAAAA,cAAc,EAAE,iBAfd;EAgBFC,IAAAA,eAAe,EAAE,kBAhBf;EAiBFtE,IAAAA,QAAQ,EAAE,UAjBR;EAkBFuE,IAAAA,eAAe,EAAE,kBAlBf;EAmBFC,IAAAA,cAAc,EAAE,iBAnBd;EAoBFC,IAAAA,UAAU,EAAE,oBApBV;EAqBFpN,IAAAA,QAAQ,EAAE,UArBR;EAsBFD,IAAAA,QAAQ,EAAE,UAtBR;EAuBFsN,IAAAA,QAAQ,EAAE,0BAvBR;EAwBFjJ,IAAAA,KAAK,EAAE,OAxBL;EAyBFkJ,IAAAA,MAAM,EAAE,QAzBN;EA0BFxU,IAAAA,OAAO,EAAE,SA1BP;EA2BF0T,IAAAA,IAAI,EAAE,MA3BJ;EA4BFna,IAAAA,KAAK,EAAE,OA5BL;EA6BFkb,IAAAA,GAAG,EAAE,KA7BH;EA8BFC,IAAAA,GAAG,EAAE,KA9BH;EA+BFC,IAAAA,KAAK,EAAE,OA/BL;EAgCFC,IAAAA,QAAQ,EAAE,UAhCR;EAiCFtR,IAAAA,OAAO,EAAE,SAjCP;EAkCFuR,IAAAA,aAAa,EAAE,IAlCb;EAmCFC,IAAAA,YAAY,EAAE;EACV,YAAM,IADI;EAEV,YAAM,IAFI;EAGV,YAAM,IAHI;EAIV,WAAK,IAJK;EAKV,WAAK,IALK;EAMV,WAAK;EANK;EAnCZ,GAzIO;EAsLb;EACA3E,EAAAA,IAAI,EAAE;EACFN,IAAAA,QAAQ,EAAE,IADR;EAEF7M,IAAAA,KAAK,EAAE;EACH+R,MAAAA,GAAG,EAAE,wCADF;EAEHC,MAAAA,MAAM,EAAE,wCAFL;EAGHrX,MAAAA,GAAG,EAAE;EAHF,KAFL;EAOFsF,IAAAA,OAAO,EAAE;EACL8R,MAAAA,GAAG,EAAE,oCADA;EAELpX,MAAAA,GAAG,EACC;EAHC,KAPP;EAYFsX,IAAAA,SAAS,EAAE;EACPF,MAAAA,GAAG,EAAE;EADE;EAZT,GAvLO;EAwMb;EACA5J,EAAAA,SAAS,EAAE;EACP7D,IAAAA,IAAI,EAAE,IADC;EAEPxH,IAAAA,IAAI,EAAE,IAFC;EAGP8G,IAAAA,KAAK,EAAE,IAHA;EAIPC,IAAAA,OAAO,EAAE,IAJF;EAKPC,IAAAA,MAAM,EAAE,IALD;EAMPC,IAAAA,WAAW,EAAE,IANN;EAOPC,IAAAA,IAAI,EAAE,IAPC;EAQPO,IAAAA,MAAM,EAAE,IARD;EASPL,IAAAA,QAAQ,EAAE,IATH;EAUP2I,IAAAA,QAAQ,EAAE,IAVH;EAWP1I,IAAAA,UAAU,EAAE,IAXL;EAYPrJ,IAAAA,GAAG,EAAE,IAZE;EAaPI,IAAAA,OAAO,EAAE,IAbF;EAcPoN,IAAAA,KAAK,EAAE,IAdA;EAePtL,IAAAA,OAAO,EAAE,IAfF;EAgBP0T,IAAAA,IAAI,EAAE,IAhBC;EAiBPpF,IAAAA,QAAQ,EAAE;EAjBH,GAzME;EA6Nb;EACA5Z,EAAAA,MAAM,EAAE;EAEJ;EACA,SAHI,EAIJ,UAJI,EAKJ,SALI,EAMJ,SANI,EAOJ,SAPI,EAQJ,SARI,EASJ,gBATI,EAUJ,WAVI,EAWJ,YAXI,EAYJ,gBAZI,EAaJ,YAbI,EAcJ,cAdI,EAeJ,MAfI,EAgBJ,OAhBI,EAiBJ,OAjBI,EAkBJ,SAlBI,EAmBJ,QAnBI,EAoBJ,SApBI,EAqBJ,YArBI,EAsBJ,WAtBI;EAyBJ,YAzBI,EA0BJ,iBA1BI,EA2BJ,gBA3BI,EA4BJ,iBA5BI,EA6BJ,kBA7BI,EA8BJ,gBA9BI,EA+BJ,gBA/BI,EAgCJ,eAhCI,EAiCJ,OAjCI;EAoCJ,eApCI;EAuCJ,iBAvCI;EA0CJ,aA1CI,EA2CJ,iBA3CI,EA4CJ,kBA5CI,EA6CJ,WA7CI,EA8CJ,aA9CI,EA+CJ,aA/CI,EAgDJ,gBAhDI,EAiDJ,eAjDI,EAkDJ,UAlDI,CA9NK;EAmRb;EACA;EACAgS,EAAAA,SAAS,EAAE;EACPwO,IAAAA,QAAQ,EAAE,4CADH;EAEP7e,IAAAA,SAAS,EAAE,OAFJ;EAGP6P,IAAAA,QAAQ,EAAE;EACN7P,MAAAA,SAAS,EAAE,IADL;EAENG,MAAAA,OAAO,EAAE;EAFH,KAHH;EAOPka,IAAAA,MAAM,EAAE,aAPD;EAQP/J,IAAAA,OAAO,EAAE;EACL7G,MAAAA,IAAI,EAAE,oBADD;EAEL8G,MAAAA,KAAK,EAAE,qBAFF;EAGLC,MAAAA,OAAO,EAAE,uBAHJ;EAILC,MAAAA,MAAM,EAAE,sBAJH;EAKLC,MAAAA,WAAW,EAAE,4BALR;EAMLC,MAAAA,IAAI,EAAE,oBAND;EAOLE,MAAAA,QAAQ,EAAE,wBAPL;EAQL2I,MAAAA,QAAQ,EAAE,wBARL;EASL1I,MAAAA,UAAU,EAAE,0BATP;EAULrJ,MAAAA,GAAG,EAAE,mBAVA;EAWLI,MAAAA,OAAO,EAAE,uBAXJ;EAYL+I,MAAAA,QAAQ,EAAE,wBAZL;EAaLyM,MAAAA,IAAI,EAAE;EAbD,KARF;EAuBPrM,IAAAA,MAAM,EAAE;EACJC,MAAAA,IAAI,EAAE,oBADF;EAEJC,MAAAA,MAAM,EAAE,sBAFJ;EAGJ+D,MAAAA,KAAK,EAAE,qBAHH;EAIJgD,MAAAA,QAAQ,EAAE,wBAJN;EAKJtO,MAAAA,OAAO,EAAE;EALL,KAvBD;EA8BPwH,IAAAA,OAAO,EAAE;EACL/H,MAAAA,WAAW,EAAE,sBADR;EAELiI,MAAAA,QAAQ,EAAE,uBAFL;EAGLD,MAAAA,MAAM,EAAE,yBAHH;EAILiM,MAAAA,IAAI,EAAE,uBAJD;EAI0B;EAC/BnM,MAAAA,MAAM,EAAE;EALH,KA9BF;EAqCPH,IAAAA,QAAQ,EAAE,iBArCH;EAsCPF,IAAAA,QAAQ,EAAE,iBAtCH;EAuCP8L,IAAAA,OAAO,EAAE,gBAvCF;EAwCPlK,IAAAA,IAAI,EAAE;EACF9I,MAAAA,OAAO,EAAE;EADP;EAxCC,GArRE;EAkUb;EACAnE,EAAAA,UAAU,EAAE;EACRhH,IAAAA,IAAI,EAAE,WADE;EAER2I,IAAAA,QAAQ,EAAE,WAFF;EAGRF,IAAAA,KAAK,EAAE,qBAHC;EAIR8U,IAAAA,KAAK,EAAE,mBAJC;EAKR+C,IAAAA,cAAc,EAAE,8BALR;EAMRC,IAAAA,MAAM,EAAE,cANA;EAORC,IAAAA,aAAa,EAAE,sBAPP;EAQRC,IAAAA,GAAG,EAAE,WARG;EASRjM,IAAAA,OAAO,EAAE,eATD;EAURoH,IAAAA,cAAc,EAAE,wBAVR;EAWR8E,IAAAA,OAAO,EAAE,eAXD;EAYR7V,IAAAA,MAAM,EAAE,cAZA;EAaR8V,IAAAA,OAAO,EAAE,eAbD;EAcRC,IAAAA,OAAO,EAAE,eAdD;EAeRC,IAAAA,KAAK,EAAE,aAfC;EAgBR9N,IAAAA,OAAO,EAAE,eAhBD;EAiBR+K,IAAAA,IAAI,EAAE,YAjBE;EAkBR/Y,IAAAA,MAAM,EAAE,eAlBA;EAmBR2Z,IAAAA,YAAY,EAAE,qBAnBN;EAoBRrW,IAAAA,KAAK,EAAE,cApBC;EAqBRyY,IAAAA,OAAO,EAAE,gBArBD;EAsBRC,IAAAA,WAAW,EAAE,eAtBL;EAuBRC,IAAAA,YAAY,EAAE,qBAvBN;EAwBRrO,IAAAA,OAAO,EAAE;EACL5B,MAAAA,IAAI,EAAE;EADD,KAxBD;EA2BRkD,IAAAA,IAAI,EAAE;EACFrR,MAAAA,KAAK,EAAE,mBADL;EAEFoR,MAAAA,KAAK,EAAE,aAFL;EAGFtE,MAAAA,IAAI,EAAE;EAHJ,KA3BE;EAgCR2C,IAAAA,QAAQ,EAAE;EACN5D,MAAAA,OAAO,EAAE,wBADH;EAENoO,MAAAA,MAAM,EAAE;EAFF,KAhCF;EAoCRvK,IAAAA,UAAU,EAAE;EACR7D,MAAAA,OAAO,EAAE,0BADD;EAERwQ,MAAAA,QAAQ,EAAE;EAFF,KApCJ;EAwCRhW,IAAAA,GAAG,EAAE;EACDhK,MAAAA,SAAS,EAAE,qBADV;EAED4d,MAAAA,MAAM,EAAE;EAFP,KAxCG;EA4CRxT,IAAAA,OAAO,EAAE;EACLpK,MAAAA,SAAS,EAAE,yBADN;EAEL4d,MAAAA,MAAM,EAAE;EAFH,KA5CD;EAgDRhW,IAAAA,QAAQ,EAAE;EAhDF,GAnUC;EAsXb;EACApE,EAAAA,UAAU,EAAE;EACR8a,IAAAA,KAAK,EAAE;EACH5U,MAAAA,QAAQ,EAAE,oBADP;EAEH9D,MAAAA,EAAE,EAAE;EAFD;EADC,GAvXC;EA8Xb;EACApH,EAAAA,IAAI,EAAE;EACFwjB,IAAAA,MAAM,EAAE;EADN,GA/XO;EAmYb;EACA;EACAR,EAAAA,GAAG,EAAE;EACDhS,IAAAA,OAAO,EAAE,KADR;EAEDyS,IAAAA,WAAW,EAAE;EAFZ;EArYQ,CAAjB;;ECJA;EACA;EACA;AAEA,EAAO,IAAMjY,GAAG,GAAG;EACf4T,EAAAA,MAAM,EAAE,oBADO;EAEfsE,EAAAA,QAAQ,EAAE;EAFK,CAAZ;;ECJP;EACA;EACA;AAEA,EAAO,IAAMC,SAAS,GAAG;EACrBjX,EAAAA,KAAK,EAAE,OADc;EAErBiE,EAAAA,OAAO,EAAE,SAFY;EAGrBD,EAAAA,KAAK,EAAE;EAHc,CAAlB;AAMP,EAAO,IAAMkT,KAAK,GAAG;EACjB7Y,EAAAA,KAAK,EAAE,OADU;EAEjBC,EAAAA,KAAK,EAAE;EAFU,CAAd;EAKP;;;;;AAIA,EAAO,SAAS6Y,gBAAT,CAA0BxiB,GAA1B,EAA+B;EAClC;EACA,MAAI,wDAAwDkJ,IAAxD,CAA6DlJ,GAA7D,CAAJ,EAAuE;EACnE,WAAOsiB,SAAS,CAAChT,OAAjB;EACH,GAJiC;;;EAOlC,MAAI,wDAAwDpG,IAAxD,CAA6DlJ,GAA7D,CAAJ,EAAuE;EACnE,WAAOsiB,SAAS,CAACjT,KAAjB;EACH;;EAED,SAAO,IAAP;EACH;;EC/BD;EACA;EACA;EAEA,IAAMoT,IAAI,GAAG,SAAPA,IAAO,GAAM,EAAnB;;MAEqBC;;;EACjB,qBAA6B;EAAA,QAAjB/S,OAAiB,uEAAP,KAAO;;EAAA;;EACzB,SAAKA,OAAL,GAAexR,MAAM,CAACwkB,OAAP,IAAkBhT,OAAjC;;EAEA,QAAI,KAAKA,OAAT,EAAkB;EACd,WAAKlD,GAAL,CAAS,mBAAT;EACH;EACJ;;;;0BAES;EACN;EACA,aAAO,KAAKkD,OAAL,GAAexS,QAAQ,CAAC4J,SAAT,CAAmB0Q,IAAnB,CAAwBnW,IAAxB,CAA6BqhB,OAAO,CAAClW,GAArC,EAA0CkW,OAA1C,CAAf,GAAoEF,IAA3E;EACH;;;0BAEU;EACP;EACA,aAAO,KAAK9S,OAAL,GAAexS,QAAQ,CAAC4J,SAAT,CAAmB0Q,IAAnB,CAAwBnW,IAAxB,CAA6BqhB,OAAO,CAACxO,IAArC,EAA2CwO,OAA3C,CAAf,GAAqEF,IAA5E;EACH;;;0BAEW;EACR;EACA,aAAO,KAAK9S,OAAL,GAAexS,QAAQ,CAAC4J,SAAT,CAAmB0Q,IAAnB,CAAwBnW,IAAxB,CAA6BqhB,OAAO,CAACzO,KAArC,EAA4CyO,OAA5C,CAAf,GAAsEF,IAA7E;EACH;;;;;;EChBL,SAASG,QAAT,GAAoB;EAChB,MAAI,CAAC,KAAKjT,OAAV,EAAmB;EACf;EACH,GAHe;;;EAMhB,MAAMgG,MAAM,GAAG,KAAK/J,MAAL,CAAYnJ,QAAZ,CAAqBuQ,OAArB,CAA6BQ,UAA5C;;EACA,MAAI1S,EAAE,CAACpB,OAAH,CAAWiW,MAAX,CAAJ,EAAwB;EACpBA,IAAAA,MAAM,CAACuC,OAAP,GAAiB,KAAK6F,MAAtB;EACH,GATe;;;EAYhBnc,EAAAA,YAAY,CAACN,IAAb,CAAkB,KAAKsK,MAAvB,EAA+B,KAAKtH,MAApC,EAA4C,KAAKyZ,MAAL,GAAc,iBAAd,GAAkC,gBAA9E,EAAgG,IAAhG,EAZgB;;EAehB,MAAI,CAAClV,OAAO,CAACU,KAAb,EAAoB;EAChBpC,IAAAA,SAAS,CAAC7F,IAAV,CAAe,KAAKsK,MAApB,EAA4B,KAAKtH,MAAjC,EAAyC,KAAKyZ,MAA9C;EACH;EACJ;;EAED,SAAS8E,cAAT,GAAwC;EAAA;;EAAA,MAAhBliB,MAAgB,uEAAP,KAAO;;EACpC;EACA,MAAIA,MAAJ,EAAY;EACR,SAAKmiB,cAAL,GAAsB;EAClBC,MAAAA,CAAC,EAAE5kB,MAAM,CAAC6kB,OAAP,IAAkB,CADH;EAElBC,MAAAA,CAAC,EAAE9kB,MAAM,CAAC+kB,OAAP,IAAkB;EAFH,KAAtB;EAIH,GALD,MAKO;EACH/kB,IAAAA,MAAM,CAACglB,QAAP,CAAgB,KAAKL,cAAL,CAAoBC,CAApC,EAAuC,KAAKD,cAAL,CAAoBG,CAA3D;EACH,GATmC;;;EAYpC9e,EAAAA,QAAQ,CAACkN,IAAT,CAAc5I,KAAd,CAAoB2a,QAApB,GAA+BziB,MAAM,GAAG,QAAH,GAAc,EAAnD,CAZoC;;EAepCyF,EAAAA,WAAW,CAAC,KAAK9B,MAAN,EAAc,KAAKsH,MAAL,CAAY3D,MAAZ,CAAmBC,UAAnB,CAA8BsL,UAA9B,CAAyC2M,QAAvD,EAAiExf,MAAjE,CAAX,CAfoC;;EAkBpC,MAAIkI,OAAO,CAACU,KAAZ,EAAmB;EACf,QAAI8Z,QAAQ,GAAGlf,QAAQ,CAACmf,IAAT,CAAcpc,aAAd,CAA4B,uBAA5B,CAAf;EACA,QAAMqc,QAAQ,GAAG,oBAAjB,CAFe;;EAKf,QAAI,CAACF,QAAL,EAAe;EACXA,MAAAA,QAAQ,GAAGlf,QAAQ,CAACF,aAAT,CAAuB,MAAvB,CAAX;EACAof,MAAAA,QAAQ,CAACrf,YAAT,CAAsB,MAAtB,EAA8B,UAA9B;EACH,KARc;;;EAWf,QAAMwf,WAAW,GAAG1iB,EAAE,CAAChC,MAAH,CAAUukB,QAAQ,CAAC5R,OAAnB,KAA+B4R,QAAQ,CAAC5R,OAAT,CAAiB3K,QAAjB,CAA0Byc,QAA1B,CAAnD;;EAEA,QAAI5iB,MAAJ,EAAY;EACR,WAAK8iB,eAAL,GAAuB,CAACD,WAAxB;;EAEA,UAAI,CAACA,WAAL,EAAkB;EACdH,QAAAA,QAAQ,CAAC5R,OAAT,eAAwB8R,QAAxB;EACH;EACJ,KAND,MAMO,IAAI,KAAKE,eAAT,EAA0B;EAC7BJ,MAAAA,QAAQ,CAAC5R,OAAT,GAAmB4R,QAAQ,CAAC5R,OAAT,CACdzQ,KADc,CACR,GADQ,EAEd6C,MAFc,CAEP,UAAA6f,IAAI;EAAA,eAAIA,IAAI,CAACne,IAAL,OAAgBge,QAApB;EAAA,OAFG,EAGdvO,IAHc,CAGT,GAHS,CAAnB;EAIH,KAxBc;;;EA2BfxS,IAAAA,UAAU,CAAC;EAAA,aAAMmG,OAAO,CAAC,KAAI,CAACrE,MAAN,CAAb;EAAA,KAAD,EAA6B,GAA7B,CAAV;EACH,GA9CmC;;;EAiDpCse,EAAAA,QAAQ,CAACthB,IAAT,CAAc,IAAd;EACH;;MAEKqiB;;;EACF,sBAAY/X,MAAZ,EAAoB;EAAA;;EAAA;;EAChB;EACA,SAAKA,MAAL,GAAcA,MAAd,CAFgB;;EAKhB,SAAK+B,MAAL,GAAcgW,UAAU,CAAChW,MAAzB;EACA,SAAK4V,QAAL,GAAgBI,UAAU,CAACJ,QAA3B,CANgB;;EAShB,SAAKT,cAAL,GAAsB;EAAEC,MAAAA,CAAC,EAAE,CAAL;EAAQE,MAAAA,CAAC,EAAE;EAAX,KAAtB,CATgB;EAYhB;;EACA5hB,IAAAA,EAAE,CAACC,IAAH,CACI,KAAKsK,MADT,EAEIzH,QAFJ,EAGI,KAAKwJ,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,aAAiD,KAAKA,MAAtD,qBAHJ,EAII,YAAM;EACF;EACAiV,MAAAA,QAAQ,CAACthB,IAAT,CAAc,MAAd;EACH,KAPL,EAbgB;;EAwBhBD,IAAAA,EAAE,CAACC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAA1C,EAAqD,UAArD,EAAiE,UAAA9C,KAAK,EAAI;EACtE;EACA,UAAIkB,EAAE,CAACpB,OAAH,CAAW,MAAI,CAACkM,MAAL,CAAYnJ,QAAZ,CAAqB8P,QAAhC,KAA6C,MAAI,CAAC3G,MAAL,CAAYnJ,QAAZ,CAAqB8P,QAArB,CAA8B9L,QAA9B,CAAuC7G,KAAK,CAAC0E,MAA7C,CAAjD,EAAuG;EACnG;EACH;;EAED,MAAA,MAAI,CAAC3D,MAAL;EACH,KAPD,EAxBgB;;EAkChB,SAAKwQ,MAAL;EACH;;;;;EAwED;+BACS;EACL,UAAI,KAAKxB,OAAT,EAAkB;EACd,aAAK/D,MAAL,CAAYY,KAAZ,CAAkBC,GAAlB,WAAyBkX,UAAU,CAACC,MAAX,GAAoB,QAApB,GAA+B,UAAxD;EACH,OAFD,MAEO;EACH,aAAKhY,MAAL,CAAYY,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;EACH,OALI;;;EAQLrG,MAAAA,WAAW,CAAC,KAAKwF,MAAL,CAAYnJ,QAAZ,CAAqBC,SAAtB,EAAiC,KAAKkJ,MAAL,CAAY3D,MAAZ,CAAmBC,UAAnB,CAA8BsL,UAA9B,CAAyC7D,OAA1E,EAAmF,KAAKA,OAAxF,CAAX;EACH;;;;8BAGO;EACJ,UAAI,CAAC,KAAKA,OAAV,EAAmB;EACf;EACH,OAHG;;;EAMJ,UAAI9G,OAAO,CAACU,KAAR,IAAiB,KAAKqC,MAAL,CAAY3D,MAAZ,CAAmBuL,UAAnB,CAA8B4M,SAAnD,EAA8D;EAC1D,aAAK9b,MAAL,CAAYuf,qBAAZ;EACH,OAFD,MAEO,IAAI,CAACF,UAAU,CAACC,MAAhB,EAAwB;EAC3Bf,QAAAA,cAAc,CAACvhB,IAAf,CAAoB,IAApB,EAA0B,IAA1B;EACH,OAFM,MAEA,IAAI,CAAC,KAAKqM,MAAV,EAAkB;EACrB,aAAKrJ,MAAL,CAAYwf,iBAAZ;EACH,OAFM,MAEA,IAAI,CAAChjB,EAAE,CAACb,KAAH,CAAS,KAAK0N,MAAd,CAAL,EAA4B;EAC/B,aAAKrJ,MAAL,WAAe,KAAKqJ,MAApB,oBAAoC,KAAK4V,QAAzC;EACH;EACJ;;;;6BAGM;EACH,UAAI,CAAC,KAAK5T,OAAV,EAAmB;EACf;EACH,OAHE;;;EAMH,UAAI9G,OAAO,CAACU,KAAR,IAAiB,KAAKqC,MAAL,CAAY3D,MAAZ,CAAmBuL,UAAnB,CAA8B4M,SAAnD,EAA8D;EAC1D,aAAK9b,MAAL,CAAYyf,oBAAZ;EACA,aAAKnY,MAAL,CAAYO,IAAZ;EACH,OAHD,MAGO,IAAI,CAACwX,UAAU,CAACC,MAAhB,EAAwB;EAC3Bf,QAAAA,cAAc,CAACvhB,IAAf,CAAoB,IAApB,EAA0B,KAA1B;EACH,OAFM,MAEA,IAAI,CAAC,KAAKqM,MAAV,EAAkB;EACrB,SAACxJ,QAAQ,CAAC6f,gBAAT,IAA6B7f,QAAQ,CAACuc,cAAvC,EAAuDpf,IAAvD,CAA4D6C,QAA5D;EACH,OAFM,MAEA,IAAI,CAACrD,EAAE,CAACb,KAAH,CAAS,KAAK0N,MAAd,CAAL,EAA4B;EAC/B,YAAMsW,MAAM,GAAG,KAAKtW,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;EACAxJ,QAAAA,QAAQ,WAAI,KAAKwJ,MAAT,SAAkBsW,MAAlB,SAA2B,KAAKV,QAAhC,EAAR;EACH;EACJ;;;;+BAGQ;EACL,UAAI,CAAC,KAAKxF,MAAV,EAAkB;EACd,aAAKmG,KAAL;EACH,OAFD,MAEO;EACH,aAAKC,IAAL;EACH;EACJ;;;EA1FD;0BACc;EACV,aACI,CAACR,UAAU,CAACC,MAAX,IAAqB,KAAKhY,MAAL,CAAY3D,MAAZ,CAAmBuL,UAAnB,CAA8B2M,QAApD,KACA,KAAKvU,MAAL,CAAY3D,MAAZ,CAAmBuL,UAAnB,CAA8B7D,OAD9B,IAEA,KAAK/D,MAAL,CAAYzL,SAAZ,CAAsB8J,EAFtB,IAGA,KAAK2B,MAAL,CAAY2R,OAJhB;EAMH;;;;0BAGY;EACT,UAAI,CAAC,KAAK5N,OAAV,EAAmB;EACf,eAAO,KAAP;EACH,OAHQ;;;EAMT,UAAI,CAACgU,UAAU,CAACC,MAAhB,EAAwB;EACpB,eAAOld,QAAQ,CAAC,KAAKpC,MAAN,EAAc,KAAKsH,MAAL,CAAY3D,MAAZ,CAAmBC,UAAnB,CAA8BsL,UAA9B,CAAyC2M,QAAvD,CAAf;EACH;;EAED,UAAMzgB,OAAO,GAAG,CAAC,KAAKiO,MAAN,GAAexJ,QAAQ,CAACigB,iBAAxB,GAA4CjgB,QAAQ,WAAI,KAAKwJ,MAAT,SAAkB,KAAK4V,QAAvB,aAApE;EAEA,aAAO7jB,OAAO,KAAK,KAAK4E,MAAxB;EACH;;;;0BAGY;EACT,aAAOuE,OAAO,CAACU,KAAR,IAAiB,KAAKqC,MAAL,CAAY3D,MAAZ,CAAmBuL,UAAnB,CAA8B4M,SAA/C,GACD,KAAKxU,MAAL,CAAYf,KADX,GAED,KAAKe,MAAL,CAAYnJ,QAAZ,CAAqBC,SAF3B;EAGH;;;0BAnEmB;EAChB,aAAO,CAAC,EACJyB,QAAQ,CAACkgB,iBAAT,IACAlgB,QAAQ,CAACmgB,uBADT,IAEAngB,QAAQ,CAACogB,oBAFT,IAGApgB,QAAQ,CAACqgB,mBAJL,CAAR;EAMH;;;;0BAGmB;EAChB;EACA,UAAI1jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,CAACuc,cAArB,CAAJ,EAA0C;EACtC,eAAO,EAAP;EACH,OAJe;;;EAOhB,UAAI5c,KAAK,GAAG,EAAZ;EACA,UAAM2gB,QAAQ,GAAG,CAAC,QAAD,EAAW,KAAX,EAAkB,IAAlB,CAAjB;EAEAA,MAAAA,QAAQ,CAACzJ,IAAT,CAAc,UAAA0J,GAAG,EAAI;EACjB,YAAI5jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,WAAIugB,GAAJ,oBAApB,KAAiD5jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,WAAIugB,GAAJ,sBAApB,CAArD,EAAsG;EAClG5gB,UAAAA,KAAK,GAAG4gB,GAAR;EACA,iBAAO,IAAP;EACH;;EAED,eAAO,KAAP;EACH,OAPD;EASA,aAAO5gB,KAAP;EACH;;;0BAEqB;EAClB,aAAO,KAAK6J,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;EACH;;;;;;EC7JL;EACA;EACA;EACA;EACA;AAEA,EAAe,SAASgX,SAAT,CAAmBzY,GAAnB,EAAsC;EAAA,MAAd0Y,QAAc,uEAAH,CAAG;EACjD,SAAO,IAAItiB,OAAJ,CAAY,UAACC,OAAD,EAAU8N,MAAV,EAAqB;EACpC,QAAMwU,KAAK,GAAG,IAAIC,KAAJ,EAAd;;EAEA,QAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;EAClB,aAAOF,KAAK,CAACG,MAAb;EACA,aAAOH,KAAK,CAACI,OAAb;EACA,OAACJ,KAAK,CAACK,YAAN,IAAsBN,QAAtB,GAAiCriB,OAAjC,GAA2C8N,MAA5C,EAAoDwU,KAApD;EACH,KAJD;;EAMAloB,IAAAA,MAAM,CAACqF,MAAP,CAAc6iB,KAAd,EAAqB;EAAEG,MAAAA,MAAM,EAAED,OAAV;EAAmBE,MAAAA,OAAO,EAAEF,OAA5B;EAAqC7Y,MAAAA,GAAG,EAAHA;EAArC,KAArB;EACH,GAVM,CAAP;EAWH;;EClBD;AACA,EAaA,IAAMjC,EAAE,GAAG;EACPkb,EAAAA,YADO,0BACQ;EACX/e,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAY8K,SAAZ,CAAsBrQ,SAAtB,CAAgC+C,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAA1B,EAA4E,IAA5E,CAAX;EACAW,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB+Z,WAAjD,EAA8D,KAAK9hB,SAAL,CAAe8J,EAA7E,CAAX;EACH,GAJM;EAMP;EACAmK,EAAAA,oBAPO,kCAO8B;EAAA,QAAhBzT,MAAgB,uEAAP,KAAO;;EACjC,QAAIA,MAAM,IAAI,KAAKiK,OAAnB,EAA4B;EACxB,WAAKC,KAAL,CAAW7G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;EACH,KAFD,MAEO;EACH,WAAK6G,KAAL,CAAW1E,eAAX,CAA2B,UAA3B;EACH;EACJ,GAbM;EAeP;EACAif,EAAAA,KAhBO,mBAgBC;EAAA;;EACJ;EACA;EACA,SAAK5N,SAAL,CAAe3M,KAAf,GAHI;;EAMJ,QAAI,CAAC,KAAK1K,SAAL,CAAe8J,EAApB,EAAwB;EACpB,WAAKuC,KAAL,CAAW2H,IAAX,kCAA0C,KAAKtK,QAA/C,cAA2D,KAAK3I,IAAhE,GADoB;;EAIpB+I,MAAAA,EAAE,CAACmK,oBAAH,CAAwB9S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC,EAJoB;;EAOpB;EACH,KAdG;;;EAiBJ,QAAI,CAACR,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8P,QAAzB,CAAL,EAAyC;EACrC;EACAA,MAAAA,QAAQ,CAACmK,MAAT,CAAgBpb,IAAhB,CAAqB,IAArB,EAFqC;;EAKrC,WAAKkW,SAAL,CAAejF,QAAf;EACH,KAvBG;;;EA0BJtI,IAAAA,EAAE,CAACmK,oBAAH,CAAwB9S,IAAxB,CAA6B,IAA7B,EA1BI;;EA6BJ,QAAI,KAAKsJ,OAAT,EAAkB;EACd2I,MAAAA,QAAQ,CAAC+J,KAAT,CAAehc,IAAf,CAAoB,IAApB;EACH,KA/BG;;;EAkCJ,SAAKsS,MAAL,GAAc,IAAd,CAlCI;;EAqCJ,SAAKqE,KAAL,GAAa,IAAb,CArCI;;EAwCJ,SAAKN,KAAL,GAAa,IAAb,CAxCI;;EA2CJ,SAAKoI,IAAL,GAAY,IAAZ,CA3CI;;EA8CJ,SAAK1T,OAAL,GAAe,IAAf,CA9CI;;EAiDJkG,IAAAA,QAAQ,CAACwF,YAAT,CAAsBzW,IAAtB,CAA2B,IAA3B,EAjDI;;EAoDJiR,IAAAA,QAAQ,CAAC2G,UAAT,CAAoB5X,IAApB,CAAyB,IAAzB,EApDI;;EAuDJ2I,IAAAA,EAAE,CAACob,YAAH,CAAgB/jB,IAAhB,CAAqB,IAArB,EAvDI;;EA0DJ8E,IAAAA,WAAW,CACP,KAAK3D,QAAL,CAAcC,SADP,EAEP,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBiC,GAAvB,CAA2BhK,SAFpB,EAGPsJ,OAAO,CAACU,GAAR,IAAe,KAAKS,OAApB,IAA+B,KAAK2S,OAH7B,CAAX,CA1DI;;EAiEJnX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBqC,OAAvB,CAA+BpK,SAAzD,EAAoEsJ,OAAO,CAACc,OAAR,IAAmB,KAAKK,OAA5F,CAAX,CAjEI;;EAoEJxE,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBqB,KAAjD,EAAwDV,OAAO,CAACU,KAAhE,CAAX,CApEI;;EAuEJnD,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB8Z,OAAjD,EAA0D,KAAK/W,KAA/D,CAAX,CAvEI;;EA0EJ,SAAK5I,KAAL,GAAa,IAAb,CA1EI;;EA6EJG,IAAAA,UAAU,CAAC,YAAM;EACbZ,MAAAA,YAAY,CAACN,IAAb,CAAkB,KAAlB,EAAwB,KAAI,CAACuJ,KAA7B,EAAoC,OAApC;EACH,KAFS,EAEP,CAFO,CAAV,CA7EI;;EAkFJZ,IAAAA,EAAE,CAACqb,QAAH,CAAYhkB,IAAZ,CAAiB,IAAjB,EAlFI;;EAqFJ,QAAI,KAAKmgB,MAAT,EAAiB;EACbxX,MAAAA,EAAE,CAACsb,SAAH,CAAajkB,IAAb,CAAkB,IAAlB,EAAwB,KAAKmgB,MAA7B,EAAqC,KAArC,EAA4C9P,KAA5C,CAAkD,YAAM,EAAxD;EACH,KAvFG;EA0FJ;;;EACA,QAAI,KAAK1J,MAAL,CAAY8L,QAAhB,EAA0B;EACtBxB,MAAAA,QAAQ,CAAC+G,cAAT,CAAwBhY,IAAxB,CAA6B,IAA7B;EACH;EACJ,GA9GM;EAgHP;EACAgkB,EAAAA,QAjHO,sBAiHI;EACP;EACA,QAAI/P,KAAK,GAAGhG,IAAI,CAACjP,GAAL,CAAS,MAAT,EAAiB,KAAK2H,MAAtB,CAAZ,CAFO;;EAKP,QAAInH,EAAE,CAAChC,MAAH,CAAU,KAAKmJ,MAAL,CAAYwH,KAAtB,KAAgC,CAAC3O,EAAE,CAACb,KAAH,CAAS,KAAKgI,MAAL,CAAYwH,KAArB,CAArC,EAAkE;EAC9D8F,MAAAA,KAAK,gBAAS,KAAKtN,MAAL,CAAYwH,KAArB,CAAL;EACH,KAPM;;;EAUPpS,IAAAA,KAAK,CAAC0F,IAAN,CAAW,KAAKN,QAAL,CAAcuQ,OAAd,CAAsB7G,IAAtB,IAA8B,EAAzC,EAA6ClL,OAA7C,CAAqD,UAAA0U,MAAM,EAAI;EAC3DA,MAAAA,MAAM,CAAC3R,YAAP,CAAoB,YAApB,EAAkCuR,KAAlC;EACH,KAFD,EAVO;EAeP;;EACA,QAAI,KAAKkH,OAAT,EAAkB;EACd,UAAM4E,MAAM,GAAGpa,UAAU,CAAC3F,IAAX,CAAgB,IAAhB,EAAsB,QAAtB,CAAf;;EAEA,UAAI,CAACR,EAAE,CAACpB,OAAH,CAAW2hB,MAAX,CAAL,EAAyB;EACrB;EACH,OALa;;;EAQd,UAAM5R,KAAK,GAAG,CAAC3O,EAAE,CAACb,KAAH,CAAS,KAAKgI,MAAL,CAAYwH,KAArB,CAAD,GAA+B,KAAKxH,MAAL,CAAYwH,KAA3C,GAAmD,OAAjE;EACA,UAAM3B,MAAM,GAAGyB,IAAI,CAACjP,GAAL,CAAS,YAAT,EAAuB,KAAK2H,MAA5B,CAAf;EAEAoZ,MAAAA,MAAM,CAACrd,YAAP,CAAoB,OAApB,EAA6B8J,MAAM,CAACrI,OAAP,CAAe,SAAf,EAA0BgK,KAA1B,CAA7B;EACH;EACJ,GA9IM;EAgJP;EACA+V,EAAAA,YAjJO,wBAiJMC,MAjJN,EAiJc;EACjBrf,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBwZ,aAAjD,EAAgE+D,MAAhE,CAAX;EACH,GAnJM;EAqJP;EACA;EACAF,EAAAA,SAvJO,qBAuJG9D,MAvJH,EAuJ2B;EAAA;;EAAA,QAAhB7gB,OAAgB,uEAAN,IAAM;;EAC9B;EACA,QAAIA,OAAO,IAAI,KAAK6gB,MAApB,EAA4B;EACxB,aAAOnf,OAAO,CAAC+N,MAAR,CAAe,IAAIK,KAAJ,CAAU,oBAAV,CAAf,CAAP;EACH,KAJ6B;;;EAO9B,SAAK7F,KAAL,CAAW7G,YAAX,CAAwB,QAAxB,EAAkCyd,MAAlC,EAP8B;;EAU9B,WACIpf,KAAK,CACAf,IADL,CACU,IADV;EAAA,KAGKqB,IAHL,CAGU;EAAA,aAAMgiB,SAAS,CAAClD,MAAD,CAAf;EAAA,KAHV,EAIK9P,KAJL,CAIW,UAAA+T,GAAG,EAAI;EACV;EACA,UAAIjE,MAAM,KAAK,MAAI,CAACA,MAApB,EAA4B;EACxBxX,QAAAA,EAAE,CAACub,YAAH,CAAgBlkB,IAAhB,CAAqB,MAArB,EAA2B,KAA3B;EACH,OAJS;;;EAMV,YAAMokB,GAAN;EACH,KAXL,EAYK/iB,IAZL,CAYU,YAAM;EACR;EACA,UAAI8e,MAAM,KAAK,MAAI,CAACA,MAApB,EAA4B;EACxB,cAAM,IAAI/Q,KAAJ,CAAU,gDAAV,CAAN;EACH;EACJ,KAjBL,EAkBK/N,IAlBL,CAkBU,YAAM;EACRhG,MAAAA,MAAM,CAACqF,MAAP,CAAc,MAAI,CAACS,QAAL,CAAcgf,MAAd,CAAqBhZ,KAAnC,EAA0C;EACtCkd,QAAAA,eAAe,iBAAUlE,MAAV,OADuB;EAEtC;EACAmE,QAAAA,cAAc,EAAE;EAHsB,OAA1C;EAKA3b,MAAAA,EAAE,CAACub,YAAH,CAAgBlkB,IAAhB,CAAqB,MAArB,EAA2B,IAA3B;EACA,aAAOmgB,MAAP;EACH,KA1BL,CADJ;EA6BH,GA9LM;EAgMP;EACA4D,EAAAA,YAjMO,wBAiMMzlB,KAjMN,EAiMa;EAAA;;EAChB;EACAwG,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB0Z,OAAjD,EAA0D,KAAKA,OAA/D,CAAX;EACAxb,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB6D,MAAjD,EAAyD,KAAKA,MAA9D,CAAX;EACA3F,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB2Z,OAAjD,EAA0D,KAAKA,OAA/D,CAAX,CAJgB;;EAOhBxkB,IAAAA,KAAK,CAAC0F,IAAN,CAAW,KAAKN,QAAL,CAAcuQ,OAAd,CAAsB7G,IAAtB,IAA8B,EAAzC,EAA6ClL,OAA7C,CAAqD,UAAAqD,MAAM,EAAI;EAC3DA,MAAAA,MAAM,CAAC4T,OAAP,GAAiB,MAAI,CAAC0J,OAAtB;EACH,KAFD,EAPgB;;EAYhB,QAAI9gB,EAAE,CAAClB,KAAH,CAASA,KAAT,KAAmBA,KAAK,CAACsB,IAAN,KAAe,YAAtC,EAAoD;EAChD;EACH,KAde;;;EAiBhB+I,IAAAA,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuB,IAAvB;EACH,GAnNM;EAqNP;EACAwkB,EAAAA,YAtNO,wBAsNMlmB,KAtNN,EAsNa;EAAA;;EAChB,SAAKkiB,OAAL,GAAe,CAAC,SAAD,EAAY,SAAZ,EAAuBhb,QAAvB,CAAgClH,KAAK,CAACsB,IAAtC,CAAf,CADgB;;EAIhB6kB,IAAAA,YAAY,CAAC,KAAKC,MAAL,CAAYlE,OAAb,CAAZ,CAJgB;;EAOhB,SAAKkE,MAAL,CAAYlE,OAAZ,GAAsBtf,UAAU,CAAC,YAAM;EACnC;EACA4D,MAAAA,WAAW,CAAC,MAAI,CAAC3D,QAAL,CAAcC,SAAf,EAA0B,MAAI,CAACuF,MAAL,CAAYC,UAAZ,CAAuB4Z,OAAjD,EAA0D,MAAI,CAACA,OAA/D,CAAX,CAFmC;;EAKnC7X,MAAAA,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuB,MAAvB;EACH,KAN+B,EAM7B,KAAKwgB,OAAL,GAAe,GAAf,GAAqB,CANQ,CAAhC;EAOH,GApOM;EAsOP;EACA+D,EAAAA,cAvOO,0BAuOQxf,KAvOR,EAuOe;EAAA,QACVkM,WADU,GACG,KAAK9P,QADR,CACV8P,QADU;;EAGlB,QAAIA,WAAQ,IAAI,KAAKtK,MAAL,CAAY2X,YAA5B,EAA0C;EACtC;EACA,UAAMqG,eAAe,GAAI,KAAKhb,KAAL,IAAc,KAAKib,YAAL,GAAoB,IAApB,GAA2BC,IAAI,CAACC,GAAL,EAAlE,CAFsC;;EAKtC,WAAKP,cAAL,CAAoBrpB,OAAO,CAAC6J,KAAK,IAAI,KAAKyb,OAAd,IAAyB,KAAK/V,MAA9B,IAAwCwG,WAAQ,CAAC2F,OAAjD,IAA4D3F,WAAQ,CAACwP,KAArE,IAA8EkE,eAA/E,CAA3B;EACH;EACJ;EAjPM,CAAX;;MCFMI;;;EACF,qBAAYza,MAAZ,EAAoB;EAAA;;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACA,SAAK0a,OAAL,GAAe,IAAf;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EAEA,SAAKC,SAAL,GAAiB,KAAKA,SAAL,CAAehP,IAAf,CAAoB,IAApB,CAAjB;EACA,SAAK0D,UAAL,GAAkB,KAAKA,UAAL,CAAgB1D,IAAhB,CAAqB,IAArB,CAAlB;EACA,SAAKiP,WAAL,GAAmB,KAAKA,WAAL,CAAiBjP,IAAjB,CAAsB,IAAtB,CAAnB;EACA,SAAKkP,UAAL,GAAkB,KAAKA,UAAL,CAAgBlP,IAAhB,CAAqB,IAArB,CAAlB;EACH;;;;;gCAGS7X,OAAO;EAAA,UACLgM,MADK,GACM,IADN,CACLA,MADK;EAAA,UAELnJ,QAFK,GAEQmJ,MAFR,CAELnJ,QAFK;EAGb,UAAMmkB,IAAI,GAAGhnB,KAAK,CAAC4H,OAAN,GAAgB5H,KAAK,CAAC4H,OAAtB,GAAgC5H,KAAK,CAAC4W,KAAnD;EACA,UAAM0B,OAAO,GAAGtY,KAAK,CAACsB,IAAN,KAAe,SAA/B;EACA,UAAM2lB,MAAM,GAAG3O,OAAO,IAAI0O,IAAI,KAAK,KAAKN,OAAxC,CALa;;EAQb,UAAI1mB,KAAK,CAACknB,MAAN,IAAgBlnB,KAAK,CAACmnB,OAAtB,IAAiCnnB,KAAK,CAAConB,OAAvC,IAAkDpnB,KAAK,CAAC+H,QAA5D,EAAsE;EAClE;EACH,OAVY;EAab;;;EACA,UAAI,CAAC7G,EAAE,CAAC1B,MAAH,CAAUwnB,IAAV,CAAL,EAAsB;EAClB;EACH,OAhBY;;;EAmBb,UAAMK,SAAS,GAAG,SAAZA,SAAY,GAAM;EACpB;EACArb,QAAAA,MAAM,CAACE,WAAP,GAAsBF,MAAM,CAACmI,QAAP,GAAkB,EAAnB,IAA0B6S,IAAI,GAAG,EAAjC,CAArB;EACH,OAHD,CAnBa;EAyBb;;;EACA,UAAI1O,OAAJ,EAAa;EACT;EACA;EACA;EACA,YAAMzQ,OAAO,GAAGtD,QAAQ,CAACuD,aAAzB;;EACA,YAAI5G,EAAE,CAACpB,OAAH,CAAW+H,OAAX,CAAJ,EAAyB;EAAA,cACb8Z,QADa,GACA3V,MAAM,CAAC3D,MAAP,CAAc8K,SADd,CACbwO,QADa;EAAA,cAEb5N,IAFa,GAEJlR,QAAQ,CAACiR,MAFL,CAEbC,IAFa;;EAIrB,cAAIlM,OAAO,KAAKkM,IAAZ,IAAoBhN,OAAO,CAACc,OAAD,EAAU8Z,QAAV,CAA/B,EAAoD;EAChD;EACH;;EAED,cAAI3hB,KAAK,CAAC4W,KAAN,KAAgB,EAAhB,IAAsB7P,OAAO,CAACc,OAAD,EAAU,4BAAV,CAAjC,EAA0E;EACtE;EACH;EACJ,SAhBQ;;;EAmBT,YAAMI,cAAc,GAAG,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,EAAjC,EAAqC,EAArC,EAAyC,EAAzC,EAA6C,EAA7C,EAAiD,EAAjD,EAAqD,EAArD,EAAyD,EAAzD,EAA6D,EAA7D,EAAiE,EAAjE,EAAqE,EAArE,EAAyE,EAAzE,EAA6E,EAA7E,EAAiF,EAAjF,CAAvB,CAnBS;;EAsBT,YAAIA,cAAc,CAACf,QAAf,CAAwB8f,IAAxB,CAAJ,EAAmC;EAC/BhnB,UAAAA,KAAK,CAACiI,cAAN;EACAjI,UAAAA,KAAK,CAAC6W,eAAN;EACH;;EAED,gBAAQmQ,IAAR;EACI,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACI;EACA,gBAAI,CAACC,MAAL,EAAa;EACTI,cAAAA,SAAS;EACZ;;EACD;;EAEJ,eAAK,EAAL;EACA,eAAK,EAAL;EACI;EACA,gBAAI,CAACJ,MAAL,EAAa;EACTjb,cAAAA,MAAM,CAACsb,UAAP;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACAtb,YAAAA,MAAM,CAACub,cAAP,CAAsB,GAAtB;EACA;;EAEJ,eAAK,EAAL;EACI;EACAvb,YAAAA,MAAM,CAACwb,cAAP,CAAsB,GAAtB;EACA;;EAEJ,eAAK,EAAL;EACI;EACA,gBAAI,CAACP,MAAL,EAAa;EACTjb,cAAAA,MAAM,CAACqM,KAAP,GAAe,CAACrM,MAAM,CAACqM,KAAvB;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACArM,YAAAA,MAAM,CAACyb,OAAP;EACA;;EAEJ,eAAK,EAAL;EACI;EACAzb,YAAAA,MAAM,CAACuH,MAAP;EACA;;EAEJ,eAAK,EAAL;EACI;EACAvH,YAAAA,MAAM,CAAC4H,UAAP,CAAkB7S,MAAlB;EACA;;EAEJ,eAAK,EAAL;EACI;EACA,gBAAI,CAACkmB,MAAL,EAAa;EACTjb,cAAAA,MAAM,CAAC0b,cAAP;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACA1b,YAAAA,MAAM,CAACmU,IAAP,GAAc,CAACnU,MAAM,CAACmU,IAAtB;EACA;;EAEJ;EACI;EAtER,SA3BS;EAqGT;;;EACA,YAAI,CAACnU,MAAM,CAAC4H,UAAP,CAAkB7D,OAAnB,IAA8B/D,MAAM,CAAC4H,UAAP,CAAkBuK,MAAhD,IAA0D6I,IAAI,KAAK,EAAvE,EAA2E;EACvEhb,UAAAA,MAAM,CAAC4H,UAAP,CAAkB7S,MAAlB;EACH,SAxGQ;;;EA2GT,aAAK2lB,OAAL,GAAeM,IAAf;EACH,OA5GD,MA4GO;EACH,aAAKN,OAAL,GAAe,IAAf;EACH;EACJ;;;;iCAGU1mB,OAAO;EACd2S,MAAAA,QAAQ,CAAC4I,UAAT,CAAoB7Z,IAApB,CAAyB,KAAKsK,MAA9B,EAAsChM,KAAtC;EACH;;;;mCAGY;EAAA,UACDgM,MADC,GACU,IADV,CACDA,MADC;EAAA,UAEDnJ,QAFC,GAEYmJ,MAFZ,CAEDnJ,QAFC;EAITmJ,MAAAA,MAAM,CAACX,KAAP,GAAe,IAAf,CAJS;;EAOT7E,MAAAA,WAAW,CAAC3D,QAAQ,CAACC,SAAV,EAAqBkJ,MAAM,CAAC3D,MAAP,CAAcC,UAAd,CAAyB8Z,OAA9C,EAAuD,IAAvD,CAAX;EACH;;;kCAEWpiB,OAAO;EAAA,UACPgM,MADO,GACI,IADJ,CACPA,MADO;EAAA,UAEPnJ,QAFO,GAEMmJ,MAFN,CAEPnJ,QAFO;EAIfsjB,MAAAA,YAAY,CAAC,KAAKQ,UAAN,CAAZ,CAJe;;EAOf,UAAI3mB,KAAK,CAACsB,IAAN,KAAe,SAAf,IAA4BtB,KAAK,CAAC4W,KAAN,KAAgB,CAAhD,EAAmD;EAC/C;EACH,OATc;;;EAYf,UAAI5W,KAAK,CAACsB,IAAN,KAAe,SAAnB,EAA8B;EAC1B,aAAKslB,WAAL,GAAmB5mB,KAAK,CAAC2nB,SAAzB;EACH,OAdc;;;EAiBf,UAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;EACxB,YAAMhiB,SAAS,GAAGoG,MAAM,CAAC3D,MAAP,CAAcC,UAAd,CAAyBH,QAA3C;EACA,YAAMmG,OAAO,GAAGlH,WAAW,CAAC1F,IAAZ,CAAiBsK,MAAjB,aAA6BpG,SAA7B,EAAhB;EACAY,QAAAA,WAAW,CAAC8H,OAAD,EAAU1I,SAAV,EAAqB,KAArB,CAAX;EACH,OAJD,CAjBe;;;EAwBf,UAAMiiB,UAAU,GAAG7nB,KAAK,CAAC2nB,SAAN,GAAkB,KAAKf,WAAvB,IAAsC,EAAzD,CAxBe;;EA2Bf,UAAI5mB,KAAK,CAACsB,IAAN,KAAe,OAAf,IAA0B,CAACumB,UAA/B,EAA2C;EACvC;EACH,OA7Bc;;;EAgCfD,MAAAA,aAAa,GAhCE;EAmCf;;EACA,WAAKjB,UAAL,GAAkB/jB,UAAU,CAAC,YAAM;EAC/B,YAAMiF,OAAO,GAAGtD,QAAQ,CAACuD,aAAzB,CAD+B;;EAI/B,YAAI,CAACjF,QAAQ,CAACC,SAAT,CAAmB+D,QAAnB,CAA4BgB,OAA5B,CAAL,EAA2C;EACvC;EACH;;EAEDrB,QAAAA,WAAW,CAACjC,QAAQ,CAACuD,aAAV,EAAyBkE,MAAM,CAAC3D,MAAP,CAAcC,UAAd,CAAyBH,QAAlD,EAA4D,IAA5D,CAAX;EACH,OAT2B,EASzB,EATyB,CAA5B;EAUH;;;;+BAGqB;EAAA,UAAfpH,MAAe,uEAAN,IAAM;EAAA,UACViL,MADU,GACC,IADD,CACVA,MADU;;EAIlB,UAAIA,MAAM,CAAC3D,MAAP,CAAcgY,QAAd,CAAuBC,MAA3B,EAAmC;EAC/Bzf,QAAAA,cAAc,CAACa,IAAf,CAAoBsK,MAApB,EAA4BzN,MAA5B,EAAoC,eAApC,EAAqD,KAAKsoB,SAA1D,EAAqE9lB,MAArE,EAA6E,KAA7E;EACH,OANiB;;;EASlBF,MAAAA,cAAc,CAACa,IAAf,CAAoBsK,MAApB,EAA4BzH,QAAQ,CAACkN,IAArC,EAA2C,OAA3C,EAAoD,KAAK8J,UAAzD,EAAqExa,MAArE,EATkB;;EAYlBa,MAAAA,IAAI,CAACF,IAAL,CAAUsK,MAAV,EAAkBzH,QAAQ,CAACkN,IAA3B,EAAiC,YAAjC,EAA+C,KAAKsV,UAApD,EAZkB;;EAelBlmB,MAAAA,cAAc,CAACa,IAAf,CAAoBsK,MAApB,EAA4BzH,QAAQ,CAACkN,IAArC,EAA2C,oBAA3C,EAAiE,KAAKqV,WAAtE,EAAmF/lB,MAAnF,EAA2F,KAA3F,EAAkG,IAAlG;EACH;;;;kCAGW;EAAA,UACAiL,MADA,GACW,IADX,CACAA,MADA;EAAA,UAEAnJ,QAFA,GAEamJ,MAFb,CAEAnJ,QAFA;;EAKR,UAAI,CAACmJ,MAAM,CAAC3D,MAAP,CAAcgY,QAAd,CAAuBC,MAAxB,IAAkCtU,MAAM,CAAC3D,MAAP,CAAcgY,QAAd,CAAuBxY,OAA7D,EAAsE;EAClEpG,QAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBnJ,QAAQ,CAACC,SAAzB,EAAoC,eAApC,EAAqD,KAAK+jB,SAA1D,EAAqE,KAArE;EACH,OAPO;;;EAURplB,MAAAA,EAAE,CAACC,IAAH,CACIsK,MADJ,EAEInJ,QAAQ,CAACC,SAFb,EAGI,0EAHJ,EAII,UAAA9C,KAAK,EAAI;EAAA,YACG2S,WADH,GACgB9P,QADhB,CACG8P,QADH;;EAIL,YAAIA,WAAQ,IAAI3S,KAAK,CAACsB,IAAN,KAAe,iBAA/B,EAAkD;EAC9CqR,UAAAA,WAAQ,CAAC2F,OAAT,GAAmB,KAAnB;EACA3F,UAAAA,WAAQ,CAACwP,KAAT,GAAiB,KAAjB;EACH,SAPI;;;EAUL,YAAM3G,IAAI,GAAG,CAAC,YAAD,EAAe,WAAf,EAA4B,WAA5B,EAAyCtU,QAAzC,CAAkDlH,KAAK,CAACsB,IAAxD,CAAb;EAEA,YAAIwmB,KAAK,GAAG,CAAZ;;EAEA,YAAItM,IAAJ,EAAU;EACNnR,UAAAA,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuBsK,MAAvB,EAA+B,IAA/B,EADM;;EAGN8b,UAAAA,KAAK,GAAG9b,MAAM,CAACX,KAAP,GAAe,IAAf,GAAsB,IAA9B;EACH,SAlBI;;;EAqBL8a,QAAAA,YAAY,CAACna,MAAM,CAACoa,MAAP,CAAczT,QAAf,CAAZ,CArBK;;EAwBL3G,QAAAA,MAAM,CAACoa,MAAP,CAAczT,QAAd,GAAyB/P,UAAU,CAAC;EAAA,iBAAMyH,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuBsK,MAAvB,EAA+B,KAA/B,CAAN;EAAA,SAAD,EAA8C8b,KAA9C,CAAnC;EACH,OA7BL;EA+BH;;;;8BAGO;EAAA,UACI9b,MADJ,GACe,IADf,CACIA,MADJ;EAAA,UAEInJ,QAFJ,GAEiBmJ,MAFjB,CAEInJ,QAFJ;;EAKJpB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,2BAA9B,EAA2D,UAAAjL,KAAK;EAAA,eAAI2S,QAAQ,CAAC2G,UAAT,CAAoB5X,IAApB,CAAyBsK,MAAzB,EAAiChM,KAAjC,CAAJ;EAAA,OAAhE,EALI;;EAQJyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,0CAA9B,EAA0E,UAAAjL,KAAK;EAAA,eAC3E2S,QAAQ,CAAC+G,cAAT,CAAwBhY,IAAxB,CAA6BsK,MAA7B,EAAqChM,KAArC,CAD2E;EAAA,OAA/E,EARI;EAaJ;;EACAyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,oBAA9B,EAAoD,YAAM;EACtD7E,QAAAA,YAAY,CAACvD,QAAQ,CAACmR,MAAV,EAAkB,CAAChI,MAAM,CAAC+b,QAA1B,CAAZ;EACA3hB,QAAAA,YAAY,CAACvD,QAAQ,CAACuQ,OAAT,CAAiBK,IAAlB,EAAwB,CAACzH,MAAM,CAAC+b,QAAhC,CAAZ;EACH,OAHD,EAdI;;EAoBJtmB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,OAA9B,EAAuC,YAAM;EACzC;EACA,YAAIe,MAAM,CAAChB,OAAP,IAAkBgB,MAAM,CAAC2R,OAAzB,IAAoC3R,MAAM,CAAC3D,MAAP,CAAc4X,UAAtD,EAAkE;EAC9D;EACAjU,UAAAA,MAAM,CAACsH,OAAP;EACH;EACJ,OAND,EApBI;;EA6BJ7R,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,iCAA9B,EAAiE,UAAAjL,KAAK;EAAA,eAClE2S,QAAQ,CAAC4F,cAAT,CAAwB7W,IAAxB,CAA6BsK,MAA7B,EAAqChM,KAArC,CADkE;EAAA,OAAtE,EA7BI;;EAkCJyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,cAA9B,EAA8C,UAAAjL,KAAK;EAAA,eAAI2S,QAAQ,CAACwF,YAAT,CAAsBzW,IAAtB,CAA2BsK,MAA3B,EAAmChM,KAAnC,CAAJ;EAAA,OAAnD,EAlCI;;EAqCJyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,6CAA9B,EAA6E,UAAAjL,KAAK;EAAA,eAC9EqK,EAAE,CAACob,YAAH,CAAgB/jB,IAAhB,CAAqBsK,MAArB,EAA6BhM,KAA7B,CAD8E;EAAA,OAAlF,EArCI;;EA0CJyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,gCAA9B,EAAgE,UAAAjL,KAAK;EAAA,eAAIqK,EAAE,CAAC6b,YAAH,CAAgBxkB,IAAhB,CAAqBsK,MAArB,EAA6BhM,KAA7B,CAAJ;EAAA,OAArE,EA1CI;EA6CJ;;EACAyB,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,SAA9B,EAAyC,YAAM;EAC3C,YAAI,CAACe,MAAM,CAAC+V,GAAZ,EAAiB;EACb;EACH,SAH0C;;;EAM3C,YAAI/V,MAAM,CAAC+V,GAAP,CAAWhS,OAAX,IAAsB,CAAC/D,MAAM,CAAC+V,GAAP,CAAWiG,WAAtC,EAAmD;EAC/C;EACAhc,UAAAA,MAAM,CAAC+V,GAAP,CAAWkG,cAAX,CAA0BllB,IAA1B,CAA+B;EAAA,mBAAMiJ,MAAM,CAAC+V,GAAP,CAAWxV,IAAX,EAAN;EAAA,WAA/B,EAAwDwF,KAAxD,CAA8D;EAAA,mBAAM/F,MAAM,CAACO,IAAP,EAAN;EAAA,WAA9D;EACH;EACJ,OAVD,EA9CI;;EA2DJ,UAAIP,MAAM,CAACzL,SAAP,CAAiB8J,EAAjB,IAAuB2B,MAAM,CAAC3D,MAAP,CAAc0X,WAArC,IAAoD,CAAC/T,MAAM,CAACkc,OAAhE,EAAyE;EACrE;EACA,YAAMjlB,OAAO,GAAGoE,UAAU,CAAC3F,IAAX,CAAgBsK,MAAhB,aAA4BA,MAAM,CAAC3D,MAAP,CAAcC,UAAd,CAAyByB,KAArD,EAAhB,CAFqE;;EAKrE,YAAI,CAAC7I,EAAE,CAACpB,OAAH,CAAWmD,OAAX,CAAL,EAA0B;EACtB;EACH,SAPoE;;;EAUrExB,QAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBnJ,QAAQ,CAACC,SAAzB,EAAoC,OAApC,EAA6C,UAAA9C,KAAK,EAAI;EAClD,cAAMkD,OAAO,GAAG,CAACL,QAAQ,CAACC,SAAV,EAAqBG,OAArB,CAAhB,CADkD;;EAIlD,cAAI,CAACC,OAAO,CAACgE,QAAR,CAAiBlH,KAAK,CAAC0E,MAAvB,CAAD,IAAmC,CAACzB,OAAO,CAAC4D,QAAR,CAAiB7G,KAAK,CAAC0E,MAAvB,CAAxC,EAAwE;EACpE;EACH,WANiD;;;EASlD,cAAIsH,MAAM,CAACX,KAAP,IAAgBW,MAAM,CAAC3D,MAAP,CAAc2X,YAAlC,EAAgD;EAC5C;EACH;;EAED,cAAIhU,MAAM,CAACmc,KAAX,EAAkB;EACdnc,YAAAA,MAAM,CAACsH,OAAP;EACAtH,YAAAA,MAAM,CAACO,IAAP;EACH,WAHD,MAGO;EACHP,YAAAA,MAAM,CAACsb,UAAP;EACH;EACJ,SAnBD;EAoBH,OAzFG;;;EA4FJ,UAAItb,MAAM,CAACzL,SAAP,CAAiB8J,EAAjB,IAAuB2B,MAAM,CAAC3D,MAAP,CAAc6X,kBAAzC,EAA6D;EACzDze,QAAAA,EAAE,CAACC,IAAH,CACIsK,MADJ,EAEInJ,QAAQ,CAACI,OAFb,EAGI,aAHJ,EAII,UAAAjD,KAAK,EAAI;EACLA,UAAAA,KAAK,CAACiI,cAAN;EACH,SANL,EAOI,KAPJ;EASH,OAtGG;;;EAyGJxG,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,cAA9B,EAA8C,YAAM;EAChD;EACAe,QAAAA,MAAM,CAACgE,OAAP,CAAe/D,GAAf,CAAmB;EACf+H,UAAAA,MAAM,EAAEhI,MAAM,CAACgI,MADA;EAEfqE,UAAAA,KAAK,EAAErM,MAAM,CAACqM;EAFC,SAAnB;EAIH,OAND,EAzGI;;EAkHJ5W,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,YAA9B,EAA4C,YAAM;EAC9C;EACA0H,QAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4BsK,MAA5B,EAAoC,OAApC,EAF8C;;;EAK9CA,QAAAA,MAAM,CAACgE,OAAP,CAAe/D,GAAf,CAAmB;EAAE8L,UAAAA,KAAK,EAAE/L,MAAM,CAAC+L;EAAhB,SAAnB;EACH,OAND,EAlHI;;EA2HJtW,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,eAA9B,EAA+C,UAAAjL,KAAK,EAAI;EACpD;EACA2S,QAAAA,QAAQ,CAACoH,aAAT,CAAuBrY,IAAvB,CAA4BsK,MAA5B,EAAoC,SAApC,EAA+C,IAA/C,EAAqDhM,KAAK,CAACkC,MAAN,CAAauK,OAAlE;EACH,OAHD,EA3HI;;EAiIJhL,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8B,qBAA9B,EAAqD,YAAM;EACvD0H,QAAAA,QAAQ,CAAC0J,eAAT,CAAyB3a,IAAzB,CAA8BsK,MAA9B;EACH,OAFD,EAjII;EAsIJ;;EACA,UAAMoc,WAAW,GAAGpc,MAAM,CAAC3D,MAAP,CAAclH,MAAd,CAAqBknB,MAArB,CAA4B,CAAC,OAAD,EAAU,SAAV,CAA5B,EAAkDjT,IAAlD,CAAuD,GAAvD,CAApB;EAEA3T,MAAAA,EAAE,CAACC,IAAH,CAAQsK,MAAR,EAAgBA,MAAM,CAACf,KAAvB,EAA8Bmd,WAA9B,EAA2C,UAAApoB,KAAK,EAAI;EAAA,4BAC1BA,KAD0B,CAC1CkC,MAD0C;EAAA,YAC1CA,MAD0C,8BACjC,EADiC;;EAIhD,YAAIlC,KAAK,CAACsB,IAAN,KAAe,OAAnB,EAA4B;EACxBY,UAAAA,MAAM,GAAG8J,MAAM,CAACf,KAAP,CAAaqJ,KAAtB;EACH;;EAEDtS,QAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BnJ,QAAQ,CAACC,SAAnC,EAA8C9C,KAAK,CAACsB,IAApD,EAA0D,IAA1D,EAAgEY,MAAhE;EACH,OATD;EAUH;;;;4BAGKlC,OAAOsoB,gBAAgBC,kBAAkB;EAAA,UACnCvc,MADmC,GACxB,IADwB,CACnCA,MADmC;EAE3C,UAAMwc,aAAa,GAAGxc,MAAM,CAAC3D,MAAP,CAAcuP,SAAd,CAAwB2Q,gBAAxB,CAAtB;EACA,UAAME,gBAAgB,GAAGvnB,EAAE,CAACxB,QAAH,CAAY8oB,aAAZ,CAAzB;EACA,UAAIE,QAAQ,GAAG,IAAf,CAJ2C;;EAO3C,UAAID,gBAAJ,EAAsB;EAClBC,QAAAA,QAAQ,GAAGF,aAAa,CAAC9mB,IAAd,CAAmBsK,MAAnB,EAA2BhM,KAA3B,CAAX;EACH,OAT0C;;;EAY3C,UAAI0oB,QAAQ,IAAIxnB,EAAE,CAACxB,QAAH,CAAY4oB,cAAZ,CAAhB,EAA6C;EACzCA,QAAAA,cAAc,CAAC5mB,IAAf,CAAoBsK,MAApB,EAA4BhM,KAA5B;EACH;EACJ;;;;2BAGIF,SAASwB,MAAMgnB,gBAAgBC,kBAAkC;EAAA;;EAAA,UAAhBvnB,OAAgB,uEAAN,IAAM;EAAA,UAC1DgL,MAD0D,GAC/C,IAD+C,CAC1DA,MAD0D;EAElE,UAAMwc,aAAa,GAAGxc,MAAM,CAAC3D,MAAP,CAAcuP,SAAd,CAAwB2Q,gBAAxB,CAAtB;EACA,UAAME,gBAAgB,GAAGvnB,EAAE,CAACxB,QAAH,CAAY8oB,aAAZ,CAAzB;EAEA/mB,MAAAA,EAAE,CAACC,IAAH,CACIsK,MADJ,EAEIlM,OAFJ,EAGIwB,IAHJ,EAII,UAAAtB,KAAK;EAAA,eAAI,KAAI,CAAC2oB,KAAL,CAAW3oB,KAAX,EAAkBsoB,cAAlB,EAAkCC,gBAAlC,CAAJ;EAAA,OAJT,EAKIvnB,OAAO,IAAI,CAACynB,gBALhB;EAOH;;;;oCAGU;EAAA;;EAAA,UACCzc,MADD,GACY,IADZ,CACCA,MADD;EAAA,UAECnJ,QAFD,GAEcmJ,MAFd,CAECnJ,QAFD;;EAKP,UAAM+lB,UAAU,GAAG3f,OAAO,CAACC,IAAR,GAAe,QAAf,GAA0B,OAA7C,CALO;;EAQP,UAAIrG,QAAQ,CAACuQ,OAAT,CAAiB7G,IAArB,EAA2B;EACvB9O,QAAAA,KAAK,CAAC0F,IAAN,CAAWN,QAAQ,CAACuQ,OAAT,CAAiB7G,IAA5B,EAAkClL,OAAlC,CAA0C,UAAA0U,MAAM,EAAI;EAChD,UAAA,MAAI,CAAC8B,IAAL,CAAU9B,MAAV,EAAkB,OAAlB,EAA2B/J,MAAM,CAACsb,UAAlC,EAA8C,MAA9C;EACH,SAFD;EAGH,OAZM;;;EAeP,WAAKzP,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBE,OAA3B,EAAoC,OAApC,EAA6CtH,MAAM,CAACsH,OAApD,EAA6D,SAA7D,EAfO;;EAkBP,WAAKuE,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBG,MAA3B,EAAmC,OAAnC,EAA4CvH,MAAM,CAACuH,MAAnD,EAA2D,QAA3D,EAlBO;;EAqBP,WAAKsE,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBI,WAA3B,EAAwC,OAAxC,EAAiDxH,MAAM,CAACyb,OAAxD,EAAiE,aAAjE,EArBO;;EAwBP,WAAK5P,IAAL,CACIhV,QAAQ,CAACuQ,OAAT,CAAiBK,IADrB,EAEI,OAFJ,EAGI,YAAM;EACFzH,QAAAA,MAAM,CAACqM,KAAP,GAAe,CAACrM,MAAM,CAACqM,KAAvB;EACH,OALL,EAMI,MANJ,EAxBO;;EAkCP,WAAKR,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBO,QAA3B,EAAqC,OAArC,EAA8C;EAAA,eAAM3H,MAAM,CAAC0b,cAAP,EAAN;EAAA,OAA9C,EAlCO;;EAqCP,WAAK7P,IAAL,CACIhV,QAAQ,CAACuQ,OAAT,CAAiBkJ,QADrB,EAEI,OAFJ,EAGI,YAAM;EACFta,QAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,UAAxC;EACH,OALL,EAMI,UANJ,EArCO;;EA+CP,WAAK4M,IAAL,CACIhV,QAAQ,CAACuQ,OAAT,CAAiBQ,UADrB,EAEI,OAFJ,EAGI,YAAM;EACF5H,QAAAA,MAAM,CAAC4H,UAAP,CAAkB7S,MAAlB;EACH,OALL,EAMI,YANJ,EA/CO;;EAyDP,WAAK8W,IAAL,CACIhV,QAAQ,CAACuQ,OAAT,CAAiB7I,GADrB,EAEI,OAFJ,EAGI,YAAM;EACFyB,QAAAA,MAAM,CAACzB,GAAP,GAAa,QAAb;EACH,OALL,EAMI,KANJ,EAzDO;;EAmEP,WAAKsN,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBzI,OAA3B,EAAoC,OAApC,EAA6CqB,MAAM,CAACrB,OAApD,EAA6D,SAA7D,EAnEO;;EAsEP,WAAKkN,IAAL,CAAUhV,QAAQ,CAACuQ,OAAT,CAAiBM,QAA3B,EAAqC,OAArC,EAA8C,UAAA1T,KAAK,EAAI;EACnD;EACAA,QAAAA,KAAK,CAAC6W,eAAN;;EAEAlE,QAAAA,QAAQ,CAAC4I,UAAT,CAAoB7Z,IAApB,CAAyBsK,MAAzB,EAAiChM,KAAjC;EACH,OALD,EAtEO;EA8EP;EACA;;EACA,WAAK6X,IAAL,CACIhV,QAAQ,CAACuQ,OAAT,CAAiBM,QADrB,EAEI,OAFJ,EAGI,UAAA1T,KAAK,EAAI;EACL,YAAMgnB,IAAI,GAAGhnB,KAAK,CAAC4W,KAAnB,CADK;;EAIL,YAAI,CAAC,CAAC,EAAD,EAAK,EAAL,EAAS1P,QAAT,CAAkB8f,IAAlB,CAAL,EAA8B;EAC1B;EACH,SANI;;;EASL,YAAIA,IAAI,KAAK,EAAb,EAAiB;EACbrU,UAAAA,QAAQ,CAACyE,kBAAT,CAA4B1V,IAA5B,CAAiCsK,MAAjC,EAAyC,IAAzC,EAA+C,IAA/C;;EACA;EACH,SAZI;;;EAeLhM,QAAAA,KAAK,CAACiI,cAAN,GAfK;;EAkBLjI,QAAAA,KAAK,CAAC6W,eAAN,GAlBK;;EAqBLlE,QAAAA,QAAQ,CAAC4I,UAAT,CAAoB7Z,IAApB,CAAyBsK,MAAzB,EAAiChM,KAAjC;EACH,OAzBL,EA0BI,IA1BJ,EA2BI,KA3BJ;EAAA,QAhFO;;EA+GP,WAAK6X,IAAL,CAAUhV,QAAQ,CAAC6Q,QAAT,CAAkB6B,IAA5B,EAAkC,SAAlC,EAA6C,UAAAvV,KAAK,EAAI;EAClD,YAAIA,KAAK,CAAC4W,KAAN,KAAgB,EAApB,EAAwB;EACpBjE,UAAAA,QAAQ,CAAC4I,UAAT,CAAoB7Z,IAApB,CAAyBsK,MAAzB,EAAiChM,KAAjC;EACH;EACJ,OAJD,EA/GO;;EAsHP,WAAK6X,IAAL,CAAUhV,QAAQ,CAACiR,MAAT,CAAgBC,IAA1B,EAAgC,qBAAhC,EAAuD,UAAA/T,KAAK,EAAI;EAC5D,YAAM6oB,IAAI,GAAGhmB,QAAQ,CAACgR,QAAT,CAAkBoF,qBAAlB,EAAb;EACA,YAAML,OAAO,GAAI,MAAMiQ,IAAI,CAAC1P,KAAZ,IAAsBnZ,KAAK,CAACoZ,KAAN,GAAcyP,IAAI,CAACxP,IAAzC,CAAhB;EACArZ,QAAAA,KAAK,CAAC8oB,aAAN,CAAoB1kB,YAApB,CAAiC,YAAjC,EAA+CwU,OAA/C;EACH,OAJD,EAtHO;;EA6HP,WAAKf,IAAL,CAAUhV,QAAQ,CAACiR,MAAT,CAAgBC,IAA1B,EAAgC,qDAAhC,EAAuF,UAAA/T,KAAK,EAAI;EAC5F,YAAM+T,IAAI,GAAG/T,KAAK,CAAC8oB,aAAnB;EACA,YAAM9B,IAAI,GAAGhnB,KAAK,CAAC4H,OAAN,GAAgB5H,KAAK,CAAC4H,OAAtB,GAAgC5H,KAAK,CAAC4W,KAAnD;EACA,YAAMmS,SAAS,GAAG,gBAAlB;;EAEA,YAAI7nB,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,KAA4BgnB,IAAI,KAAK,EAAT,IAAeA,IAAI,KAAK,EAAxD,EAA6D;EACzD;EACH,SAP2F;;;EAU5Fhb,QAAAA,MAAM,CAACsa,YAAP,GAAsBC,IAAI,CAACC,GAAL,EAAtB,CAV4F;;EAa5F,YAAMja,IAAI,GAAGwH,IAAI,CAACiV,YAAL,CAAkBD,SAAlB,CAAb,CAb4F;;EAgB5F,YAAME,IAAI,GAAG,CAAC,SAAD,EAAY,UAAZ,EAAwB,OAAxB,EAAiC/hB,QAAjC,CAA0ClH,KAAK,CAACsB,IAAhD,CAAb,CAhB4F;;EAmB5F,YAAIiL,IAAI,IAAI0c,IAAZ,EAAkB;EACdlV,UAAAA,IAAI,CAACxN,eAAL,CAAqBwiB,SAArB;EACA/c,UAAAA,MAAM,CAACO,IAAP;EACH,SAHD,MAGO,IAAI,CAAC0c,IAAD,IAASjd,MAAM,CAACgW,OAApB,EAA6B;EAChCjO,UAAAA,IAAI,CAAC3P,YAAL,CAAkB2kB,SAAlB,EAA6B,EAA7B;EACA/c,UAAAA,MAAM,CAACqH,KAAP;EACH;EACJ,OA1BD,EA7HO;EA0JP;EACA;;EACA,UAAIpK,OAAO,CAACU,KAAZ,EAAmB;EACf,YAAMmK,MAAM,GAAG1M,WAAW,CAAC1F,IAAZ,CAAiBsK,MAAjB,EAAyB,qBAAzB,CAAf;EACAvO,QAAAA,KAAK,CAAC0F,IAAN,CAAW2Q,MAAX,EAAmBzS,OAAnB,CAA2B,UAAA5E,KAAK;EAAA,iBAAI,MAAI,CAACob,IAAL,CAAUpb,KAAV,EAAiBmsB,UAAjB,EAA6B,UAAA5oB,KAAK;EAAA,mBAAI+I,OAAO,CAAC/I,KAAK,CAAC0E,MAAP,CAAX;EAAA,WAAlC,CAAJ;EAAA,SAAhC;EACH,OA/JM;;;EAkKP,WAAKmT,IAAL,CACIhV,QAAQ,CAACiR,MAAT,CAAgBC,IADpB,EAEI6U,UAFJ,EAGI,UAAA5oB,KAAK,EAAI;EACL,YAAM+T,IAAI,GAAG/T,KAAK,CAAC8oB,aAAnB,CADK;;EAIL,YAAII,MAAM,GAAGnV,IAAI,CAAClI,YAAL,CAAkB,YAAlB,CAAb;;EAEA,YAAI3K,EAAE,CAACb,KAAH,CAAS6oB,MAAT,CAAJ,EAAsB;EAClBA,UAAAA,MAAM,GAAGnV,IAAI,CAAC7P,KAAd;EACH;;EAED6P,QAAAA,IAAI,CAACxN,eAAL,CAAqB,YAArB;EAEAyF,QAAAA,MAAM,CAACE,WAAP,GAAsBgd,MAAM,GAAGnV,IAAI,CAACxF,GAAf,GAAsBvC,MAAM,CAACmI,QAAlD;EACH,OAhBL,EAiBI,MAjBJ,EAlKO;;EAuLP,WAAK0D,IAAL,CAAUhV,QAAQ,CAACgR,QAAnB,EAA6B,iCAA7B,EAAgE,UAAA7T,KAAK;EAAA,eACjE2S,QAAQ,CAACmG,iBAAT,CAA2BpX,IAA3B,CAAgCsK,MAAhC,EAAwChM,KAAxC,CADiE;EAAA,OAArE,EAvLO;;EA4LP,UAAIiJ,OAAO,CAACG,QAAZ,EAAsB;EAClB3L,QAAAA,KAAK,CAAC0F,IAAN,CAAWiE,WAAW,CAAC1F,IAAZ,CAAiBsK,MAAjB,EAAyB,qBAAzB,CAAX,EAA4D3K,OAA5D,CAAoE,UAAAvB,OAAO,EAAI;EAC3E,UAAA,MAAI,CAAC+X,IAAL,CAAU/X,OAAV,EAAmB,OAAnB,EAA4B,UAAAE,KAAK;EAAA,mBAAI2S,QAAQ,CAACyD,eAAT,CAAyB1U,IAAzB,CAA8BsK,MAA9B,EAAsChM,KAAK,CAAC0E,MAA5C,CAAJ;EAAA,WAAjC;EACH,SAFD;EAGH,OAhMM;EAmMP;;;EACA,UAAIsH,MAAM,CAAC3D,MAAP,CAAcwX,YAAd,IAA8B,CAAC3e,EAAE,CAACpB,OAAH,CAAW+C,QAAQ,CAACoR,OAAT,CAAiBE,QAA5B,CAAnC,EAA0E;EACtE,aAAK0D,IAAL,CAAUhV,QAAQ,CAACoR,OAAT,CAAiB/H,WAA3B,EAAwC,OAAxC,EAAiD,YAAM;EACnD;EACA,cAAIF,MAAM,CAACE,WAAP,KAAuB,CAA3B,EAA8B;EAC1B;EACH;;EAEDF,UAAAA,MAAM,CAAC3D,MAAP,CAAcmR,UAAd,GAA2B,CAACxN,MAAM,CAAC3D,MAAP,CAAcmR,UAA1C;;EAEA7G,UAAAA,QAAQ,CAAC2G,UAAT,CAAoB5X,IAApB,CAAyBsK,MAAzB;EACH,SATD;EAUH,OA/MM;;;EAkNP,WAAK6L,IAAL,CACIhV,QAAQ,CAACiR,MAAT,CAAgBE,MADpB,EAEI4U,UAFJ,EAGI,UAAA5oB,KAAK,EAAI;EACLgM,QAAAA,MAAM,CAACgI,MAAP,GAAgBhU,KAAK,CAAC0E,MAAN,CAAaR,KAA7B;EACH,OALL,EAMI,QANJ,EAlNO;;EA4NP,WAAK2T,IAAL,CAAUhV,QAAQ,CAAC8P,QAAnB,EAA6B,uBAA7B,EAAsD,UAAA3S,KAAK,EAAI;EAC3D6C,QAAAA,QAAQ,CAAC8P,QAAT,CAAkBwP,KAAlB,GAA0B,CAACnW,MAAM,CAACX,KAAR,IAAiBrL,KAAK,CAACsB,IAAN,KAAe,YAA1D;EACH,OAFD,EA5NO;;EAiOP,WAAKuW,IAAL,CAAUhV,QAAQ,CAAC8P,QAAnB,EAA6B,mDAA7B,EAAkF,UAAA3S,KAAK,EAAI;EACvF6C,QAAAA,QAAQ,CAAC8P,QAAT,CAAkB2F,OAAlB,GAA4B,CAAC,WAAD,EAAc,YAAd,EAA4BpR,QAA5B,CAAqClH,KAAK,CAACsB,IAA3C,CAA5B;EACH,OAFD,EAjOO;;EAsOP,WAAKuW,IAAL,CAAUhV,QAAQ,CAAC8P,QAAnB,EAA6B,SAA7B,EAAwC,YAAM;EAAA,YAClCtK,MADkC,GACL2D,MADK,CAClC3D,MADkC;EAAA,YAC1BxF,QAD0B,GACLmJ,MADK,CAC1BnJ,QAD0B;EAAA,YAChBujB,MADgB,GACLpa,MADK,CAChBoa,MADgB;;EAI1C5f,QAAAA,WAAW,CAAC3D,QAAQ,CAAC8P,QAAV,EAAoBtK,MAAM,CAACC,UAAP,CAAkBga,YAAtC,EAAoD,IAApD,CAAX,CAJ0C;;EAO1CjY,QAAAA,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuBsK,MAAvB,EAA+B,IAA/B,EAP0C;;EAU1CpJ,QAAAA,UAAU,CAAC,YAAM;EACb4D,UAAAA,WAAW,CAAC3D,QAAQ,CAAC8P,QAAV,EAAoBtK,MAAM,CAACC,UAAP,CAAkBga,YAAtC,EAAoD,KAApD,CAAX;EACH,SAFS,EAEP,CAFO,CAAV,CAV0C;;EAe1C,YAAMwF,KAAK,GAAG,MAAI,CAACzc,KAAL,GAAa,IAAb,GAAoB,IAAlC,CAf0C;;EAkB1C8a,QAAAA,YAAY,CAACC,MAAM,CAACzT,QAAR,CAAZ,CAlB0C;;EAqB1CyT,QAAAA,MAAM,CAACzT,QAAP,GAAkB/P,UAAU,CAAC;EAAA,iBAAMyH,EAAE,CAAC4b,cAAH,CAAkBvkB,IAAlB,CAAuBsK,MAAvB,EAA+B,KAA/B,CAAN;EAAA,SAAD,EAA8C8b,KAA9C,CAA5B;EACH,OAtBD,EAtOO;;EA+PP,WAAKjQ,IAAL,CACIhV,QAAQ,CAACiR,MAAT,CAAgBE,MADpB,EAEI,OAFJ,EAGI,UAAAhU,KAAK,EAAI;EACL;EACA;EACA,YAAMuS,QAAQ,GAAGvS,KAAK,CAACmpB,iCAAvB,CAHK;;EAAA,mBAMU,CAACnpB,KAAK,CAACopB,MAAP,EAAe,CAACppB,KAAK,CAACqpB,MAAtB,EAA8B3iB,GAA9B,CAAkC,UAAAxC,KAAK;EAAA,iBAAKqO,QAAQ,GAAG,CAACrO,KAAJ,GAAYA,KAAzB;EAAA,SAAvC,CANV;EAAA;EAAA,YAMEif,CANF;EAAA,YAMKE,CANL;;;EASL,YAAMiG,SAAS,GAAGlc,IAAI,CAACmc,IAAL,CAAUnc,IAAI,CAACC,GAAL,CAAS8V,CAAT,IAAc/V,IAAI,CAACC,GAAL,CAASgW,CAAT,CAAd,GAA4BF,CAA5B,GAAgCE,CAA1C,CAAlB,CATK;;EAYLrX,QAAAA,MAAM,CAACub,cAAP,CAAsB+B,SAAS,GAAG,EAAlC,EAZK;;EAAA,YAeGtV,MAfH,GAechI,MAAM,CAACf,KAfrB,CAeG+I,MAfH;;EAgBL,YAAKsV,SAAS,KAAK,CAAd,IAAmBtV,MAAM,GAAG,CAA7B,IAAoCsV,SAAS,KAAK,CAAC,CAAf,IAAoBtV,MAAM,GAAG,CAArE,EAAyE;EACrEhU,UAAAA,KAAK,CAACiI,cAAN;EACH;EACJ,OAtBL,EAuBI,QAvBJ,EAwBI,KAxBJ;EA0BH;;;;;;;;;;;;;ECrvBL,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;IACvB,AAEwC;MACtC,cAAc,GAAG,OAAO,EAAE,CAAC;KAC5B,AAEA;GACF,CAACuhB,cAAI,EAAE,WAAW;;;;;;EAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;MACvB,aAAa,GAAG,EAAE;MAClB,iBAAiB,GAAG,EAAE;MACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;EAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;IAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;IAErD,IAAI,YAAY,GAAG,EAAE;QACjB,CAAC,GAAG,SAAS,CAAC,MAAM;QACpB,UAAU,GAAG,CAAC;QACd,EAAE;QACF,QAAQ;QACR,CAAC;QACD,CAAC,CAAC;;;IAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;MACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAEtD,UAAU,EAAE,CAAC;MACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;KAC3C,CAAC;;;IAGF,OAAO,CAAC,EAAE,EAAE;MACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;MAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE;QACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChB,SAAS;OACV;;;MAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;MACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACZ;GACF;;;;;;;;EAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;IAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;IAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;IAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;IAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;IAGf,OAAO,CAAC,CAAC,MAAM,EAAE;MACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;MAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAChB;GACF;;;;;;;;EAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;IAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;IAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;SAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;GACtC;;;;;;;;EAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IAClD,IAAI,GAAG,GAAG,QAAQ;QACd,KAAK,GAAG,IAAI,CAAC,KAAK;QAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;QACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;QACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC9C,KAAK;QACL,CAAC,CAAC;;IAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;IAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC/B,KAAK,GAAG,IAAI,CAAC;;;MAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;MAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;MACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;KACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;MAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;MAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;KACtB,MAAM;;MAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;MAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;MACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;KAC9C;;IAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;MACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;MAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;QAC7B,IAAI;UACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;SAC3C,CAAC,OAAO,CAAC,EAAE;;;UAGV,MAAM,GAAG,GAAG,CAAC;SACd;OACF;;;MAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;QAEjB,QAAQ,IAAI,CAAC,CAAC;;;QAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;UACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACnD;OACF;;;MAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;KAC/C,CAAC;;;IAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;GAClE;;;;;;;;EAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;IAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;IAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;QACzB,CAAC,GAAG,UAAU;QACd,aAAa,GAAG,EAAE;QAClB,EAAE;QACF,CAAC,CAAC;;;IAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;MAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;MAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;QACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1C,OAAO;OACb;;MAED,UAAU,EAAE,CAAC;MACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;KAC5C,CAAC;;;IAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;GACpD;;;;;;;;;;EAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;IACjC,IAAI,QAAQ;QACR,IAAI,CAAC;;;IAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;IAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;IAGtC,IAAI,QAAQ,EAAE;MACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;QAC7B,MAAM,QAAQ,CAAC;OAChB,MAAM;QACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;OAChC;KACF;;;IAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;MAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;MAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;KAClC,EAAE,IAAI,CAAC,CAAC;GACV;;;;;;;;EAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;IAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;MAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;KACtC,CAAC,CAAC;;IAEH,OAAO,MAAM,CAAC;GACf,CAAC;;;;;;;EAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;IACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;GACvB,CAAC;;;;;;EAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;IAC9B,aAAa,GAAG,EAAE,CAAC;IACnB,iBAAiB,GAAG,EAAE,CAAC;IACvB,mBAAmB,GAAG,EAAE,CAAC;GAC1B,CAAC;;;;;;;EAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;IAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;GAClC,CAAC;;;;EAIF,OAAO,MAAM,CAAC;;GAEb,CAAC,EAAE;;;ECpSJ;AACA,EAKe,SAASC,UAAT,CAAoBrpB,GAApB,EAAyB;EACpC,SAAO,IAAIsC,OAAJ,CAAY,UAACC,OAAD,EAAU8N,MAAV,EAAqB;EACpCiZ,IAAAA,UAAM,CAACtpB,GAAD,EAAM;EACRupB,MAAAA,OAAO,EAAEhnB,OADD;EAER2R,MAAAA,KAAK,EAAE7D;EAFC,KAAN,CAAN;EAIH,GALM,CAAP;EAMH;;ECGD,SAASmZ,OAAT,CAAiBxpB,GAAjB,EAAsB;EAClB,MAAIc,EAAE,CAACb,KAAH,CAASD,GAAT,CAAJ,EAAmB;EACf,WAAO,IAAP;EACH;;EAED,MAAIc,EAAE,CAAC1B,MAAH,CAAUvC,MAAM,CAACmD,GAAD,CAAhB,CAAJ,EAA4B;EACxB,WAAOA,GAAP;EACH;;EAED,MAAMypB,KAAK,GAAG,iCAAd;EACA,SAAOzpB,GAAG,CAAC4G,KAAJ,CAAU6iB,KAAV,IAAmBnb,MAAM,CAACob,EAA1B,GAA+B1pB,GAAtC;EACH;;;EAGD,SAAS2pB,cAAT,CAAwB5Q,KAAxB,EAA+B6C,MAA/B,EAAuC;EACnC,MAAMgO,QAAQ,GAAG,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;EAAA,WAAWA,CAAC,KAAK,CAAN,GAAUD,CAAV,GAAcD,QAAQ,CAACE,CAAD,EAAID,CAAC,GAAGC,CAAR,CAAjC;EAAA,GAAjB;;EACA,MAAMpK,KAAK,GAAGkK,QAAQ,CAAC7Q,KAAD,EAAQ6C,MAAR,CAAtB;EACA,mBAAU7C,KAAK,GAAG2G,KAAlB,cAA2B9D,MAAM,GAAG8D,KAApC;EACH;;;EAGD,SAASqK,mBAAT,CAA6B5d,IAA7B,EAAmC;EAC/B,MAAIA,IAAI,IAAI,CAAC,KAAKsS,KAAL,CAAWuL,SAAxB,EAAmC;EAC/B,SAAKvL,KAAL,CAAWuL,SAAX,GAAuB,IAAvB;EACH;;EACD,MAAI,KAAKnf,KAAL,CAAWkB,MAAX,KAAsBI,IAA1B,EAAgC;EAC5B,SAAKtB,KAAL,CAAWkB,MAAX,GAAoB,CAACI,IAArB;EACAvK,IAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCsB,IAAI,GAAG,MAAH,GAAY,OAApD;EACH;EACJ;;EAED,IAAMkD,KAAK,GAAG;EACViO,EAAAA,KADU,mBACF;EAAA;;EACJ;EACAlX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcI,OAAf,EAAwB,KAAKoF,MAAL,CAAYC,UAAZ,CAAuBuW,KAA/C,EAAsD,IAAtD,CAAX,CAFI;;EAKJpP,IAAAA,KAAK,CAAC4a,cAAN,CAAqB3oB,IAArB,CAA0B,IAA1B,EALI;;EAQJ,QAAI,CAACR,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAAC+rB,KAAjB,CAAL,EAA8B;EAC1Bb,MAAAA,UAAU,CAAC,KAAKphB,MAAL,CAAYuU,IAAZ,CAAiBnN,KAAjB,CAAuB+R,GAAxB,CAAV,CACKze,IADL,CACU,YAAM;EACR0M,QAAAA,KAAK,CAAChN,KAAN,CAAYf,IAAZ,CAAiB,KAAjB;EACH,OAHL,EAIKqQ,KAJL,CAIW,UAAAuC,KAAK,EAAI;EACZ,QAAA,KAAI,CAAC1H,KAAL,CAAW2H,IAAX,CAAgB,0BAAhB,EAA4CD,KAA5C;EACH,OANL;EAOH,KARD,MAQO;EACH7E,MAAAA,KAAK,CAAChN,KAAN,CAAYf,IAAZ,CAAiB,IAAjB;EACH;EACJ,GApBS;EAsBV;EACA;EACA2oB,EAAAA,cAxBU,0BAwBK5tB,KAxBL,EAwBY;EAAA,qBACH,CAACyE,EAAE,CAAChC,MAAH,CAAUzC,KAAV,IAAmBA,KAAnB,GAA2B,KAAK4L,MAAL,CAAYyX,KAAxC,EAA+C1e,KAA/C,CAAqD,GAArD,EAA0DsF,GAA1D,CAA8DzJ,MAA9D,CADG;EAAA;EAAA,QACXkmB,CADW;EAAA,QACRE,CADQ;;EAElB,QAAMkH,OAAO,GAAI,MAAMpH,CAAP,GAAYE,CAA5B;EACA5T,IAAAA,KAAK,CAAC8a,OAAN,GAAgBA,OAAhB;EACA,SAAK1nB,QAAL,CAAcI,OAAd,CAAsB4F,KAAtB,CAA4B2hB,aAA5B,aAA+CD,OAA/C;;EAEA,QAAI,KAAKhqB,SAAL,CAAe8J,EAAnB,EAAuB;EACnB,UAAM2R,MAAM,GAAG,GAAf;EACA,UAAMyO,MAAM,GAAG,CAACzO,MAAM,GAAGuO,OAAV,KAAsBvO,MAAM,GAAG,EAA/B,CAAf;EAEA,WAAK/Q,KAAL,CAAWpC,KAAX,CAAiB6hB,SAAjB,yBAA4CD,MAA5C;EACH;EACJ,GApCS;EAsCV;EACAhoB,EAAAA,KAvCU,sBAuCF;EAAA;;EACJ,QAAMuJ,MAAM,GAAG,IAAf,CADI;;EAIJ,QAAMxL,OAAO,GAAG;EACZ2f,MAAAA,IAAI,EAAEnU,MAAM,CAAC3D,MAAP,CAAc8X,IAAd,CAAmBhC,MADb;EAEZwB,MAAAA,QAAQ,EAAE3T,MAAM,CAAC2T,QAFL;EAGZ;EACAgL,MAAAA,MAAM,EAAE,KAJI;EAKZC,MAAAA,QAAQ,EAAE,KALE;EAMZ/a,MAAAA,KAAK,EAAE,KANK;EAOZkI,MAAAA,KAAK,EAAE,IAPK;EAQZ8S,MAAAA,WAAW,EAAE,CARD;EASZC,MAAAA,OAAO,EAAE,OATG;EAUZ5gB,MAAAA,WAAW,EAAE,CAAC,KAAK7B,MAAL,CAAYuL,UAAZ,CAAuB4M;EAVzB,KAAhB;EAYA,QAAMhD,MAAM,GAAGD,cAAc,CAAC/c,OAAD,CAA7B,CAhBI;;EAmBJ,QAAIoL,MAAM,GAAGI,MAAM,CAACf,KAAP,CAAaY,YAAb,CAA0B,KAA1B,CAAb,CAnBI;;EAsBJ,QAAI3K,EAAE,CAACb,KAAH,CAASuL,MAAT,CAAJ,EAAsB;EAClBA,MAAAA,MAAM,GAAGI,MAAM,CAACf,KAAP,CAAaY,YAAb,CAA0BG,MAAM,CAAC3D,MAAP,CAActE,UAAd,CAAyB8a,KAAzB,CAA+B1Y,EAAzD,CAAT;EACH;;EAED,QAAMA,EAAE,GAAGyjB,OAAO,CAAChe,MAAD,CAAlB,CA1BI;;EA6BJ,QAAM6V,MAAM,GAAGpd,aAAa,CAAC,QAAD,CAA5B;EACA,QAAMiI,GAAG,GAAG4B,MAAM,CAAClC,MAAM,CAAC3D,MAAP,CAAcuU,IAAd,CAAmBnN,KAAnB,CAAyBgS,MAA1B,EAAkCtb,EAAlC,EAAsCqX,MAAtC,CAAlB;EACAiE,IAAAA,MAAM,CAACrd,YAAP,CAAoB,KAApB,EAA2BkI,GAA3B;EACAmV,IAAAA,MAAM,CAACrd,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;EACAqd,IAAAA,MAAM,CAACrd,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;EACAqd,IAAAA,MAAM,CAACrd,YAAP,CAAoB,OAApB,EAA6B,UAA7B,EAlCI;;EAAA,QAqCIyd,MArCJ,GAqCe7V,MArCf,CAqCI6V,MArCJ;;EAwCJ,QAAM5e,OAAO,GAAGoB,aAAa,CAAC,KAAD,EAAQ;EAAEwd,MAAAA,MAAM,EAANA,MAAF;EAAU3b,MAAAA,KAAK,EAAE8F,MAAM,CAAC3D,MAAP,CAAcC,UAAd,CAAyBsZ;EAA1C,KAAR,CAA7B;EACA3e,IAAAA,OAAO,CAACW,WAAR,CAAoB6d,MAApB;EACAzV,IAAAA,MAAM,CAACf,KAAP,GAAehG,cAAc,CAAChC,OAAD,EAAU+I,MAAM,CAACf,KAAjB,CAA7B,CA1CI;;EA6CJsF,IAAAA,KAAK,CAACrC,MAAM,CAAClC,MAAM,CAAC3D,MAAP,CAAcuU,IAAd,CAAmBnN,KAAnB,CAAyBrF,GAA1B,EAA+BjE,EAA/B,CAAP,EAA2C,MAA3C,CAAL,CAAwDpD,IAAxD,CAA6D,UAAA8N,QAAQ,EAAI;EACrE,UAAI3P,EAAE,CAACb,KAAH,CAASwQ,QAAT,CAAJ,EAAwB;EACpB;EACH,OAHoE;;;EAMrE,UAAMzQ,GAAG,GAAG,IAAInB,GAAJ,CAAQ4R,QAAQ,CAAC,CAAD,CAAR,CAAYka,eAApB,CAAZ,CANqE;;EASrE3qB,MAAAA,GAAG,CAAC4qB,QAAJ,aAAkB5qB,GAAG,CAAC4qB,QAAJ,CAAa5pB,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB,UATqE;;EAYrEiJ,MAAAA,EAAE,CAACsb,SAAH,CAAajkB,IAAb,CAAkBsK,MAAlB,EAA0B5L,GAAG,CAACuc,IAA9B,EAAoC5K,KAApC,CAA0C,YAAM,EAAhD;EACH,KAbD,EA7CI;EA6DJ;;EACA/F,IAAAA,MAAM,CAAC6S,KAAP,GAAe,IAAItgB,MAAM,CAAC+rB,KAAP,CAAaW,MAAjB,CAAwBxJ,MAAxB,EAAgC;EAC3C7B,MAAAA,SAAS,EAAE5T,MAAM,CAAC3D,MAAP,CAAcuX,SADkB;EAE3CvH,MAAAA,KAAK,EAAErM,MAAM,CAACqM;EAF6B,KAAhC,CAAf;EAKArM,IAAAA,MAAM,CAACf,KAAP,CAAakB,MAAb,GAAsB,IAAtB;EACAH,IAAAA,MAAM,CAACf,KAAP,CAAaiB,WAAb,GAA2B,CAA3B,CApEI;;EAuEJ,QAAIF,MAAM,CAACzL,SAAP,CAAiB8J,EAArB,EAAyB;EACrB2B,MAAAA,MAAM,CAAC6S,KAAP,CAAaqM,gBAAb;EACH,KAzEG;;;EA4EJlf,IAAAA,MAAM,CAACf,KAAP,CAAasB,IAAb,GAAoB,YAAM;EACtB4d,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;EACA,aAAOA,MAAM,CAAC6S,KAAP,CAAatS,IAAb,EAAP;EACH,KAHD;;EAKAP,IAAAA,MAAM,CAACf,KAAP,CAAaoI,KAAb,GAAqB,YAAM;EACvB8W,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;EACA,aAAOA,MAAM,CAAC6S,KAAP,CAAaxL,KAAb,EAAP;EACH,KAHD;;EAKArH,IAAAA,MAAM,CAACf,KAAP,CAAakgB,IAAb,GAAoB,YAAM;EACtBnf,MAAAA,MAAM,CAACqH,KAAP;EACArH,MAAAA,MAAM,CAACE,WAAP,GAAqB,CAArB;EACH,KAHD,CAtFI;;;EAAA,QA4FEA,WA5FF,GA4FkBF,MAAM,CAACf,KA5FzB,CA4FEiB,WA5FF;EA6FJnP,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,aAApC,EAAmD;EAC/CvK,MAAAA,GAD+C,iBACzC;EACF,eAAOwL,WAAP;EACH,OAH8C;EAI/CD,MAAAA,GAJ+C,eAI3CoG,IAJ2C,EAIrC;EACN;EAEA;EAHM,YAIEwM,KAJF,GAImC7S,MAJnC,CAIE6S,KAJF;EAAA,YAIS5T,KAJT,GAImCe,MAJnC,CAISf,KAJT;EAAA,YAIgBkB,MAJhB,GAImCH,MAJnC,CAIgBG,MAJhB;EAAA,YAIwB6H,MAJxB,GAImChI,MAJnC,CAIwBgI,MAJxB;EAKN,YAAMoX,YAAY,GAAGjf,MAAM,IAAI,CAAC0S,KAAK,CAACuL,SAAtC,CALM;;EAQNnf,QAAAA,KAAK,CAACwO,OAAN,GAAgB,IAAhB;EACAzX,QAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0Bf,KAA1B,EAAiC,SAAjC,EATM;;EAYNvI,QAAAA,OAAO,CAACC,OAAR,CAAgByoB,YAAY,IAAIvM,KAAK,CAACwM,SAAN,CAAgB,CAAhB,CAAhC;EAAA,SAEKtoB,IAFL,CAEU;EAAA,iBAAM8b,KAAK,CAACyM,cAAN,CAAqBjZ,IAArB,CAAN;EAAA,SAFV;EAAA,SAIKtP,IAJL,CAIU;EAAA,iBAAMqoB,YAAY,IAAIvM,KAAK,CAACxL,KAAN,EAAtB;EAAA,SAJV;EAAA,SAMKtQ,IANL,CAMU;EAAA,iBAAMqoB,YAAY,IAAIvM,KAAK,CAACwM,SAAN,CAAgBrX,MAAhB,CAAtB;EAAA,SANV,EAOKjC,KAPL,CAOW,YAAM;EAEZ,SATL;EAUH;EA1B8C,KAAnD,EA7FI;;EA2HJ,QAAIgG,KAAK,GAAG/L,MAAM,CAAC3D,MAAP,CAAc0P,KAAd,CAAoBqI,QAAhC;EACArjB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,cAApC,EAAoD;EAChDvK,MAAAA,GADgD,iBAC1C;EACF,eAAOqX,KAAP;EACH,OAH+C;EAIhD9L,MAAAA,GAJgD,eAI5CxP,KAJ4C,EAIrC;EACPuP,QAAAA,MAAM,CAAC6S,KAAP,CACK0M,eADL,CACqB9uB,KADrB,EAEKsG,IAFL,CAEU,YAAM;EACRgV,UAAAA,KAAK,GAAGtb,KAAR;EACAuF,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACH,SALL,EAMK8G,KANL,CAMW,UAAAuC,KAAK,EAAI;EACZ;EACA,cAAIA,KAAK,CAACkX,IAAN,KAAe,OAAnB,EAA4B;EACxB7Y,YAAAA,QAAQ,CAACsI,YAAT,CAAsBvZ,IAAtB,CAA2BsK,MAA3B,EAAmC,EAAnC;EACH;EACJ,SAXL;EAYH;EAjB+C,KAApD,EA5HI;;EAAA,QAiJEgI,MAjJF,GAiJahI,MAAM,CAAC3D,MAjJpB,CAiJE2L,MAjJF;EAkJJjX,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,QAApC,EAA8C;EAC1CvK,MAAAA,GAD0C,iBACpC;EACF,eAAOsT,MAAP;EACH,OAHyC;EAI1C/H,MAAAA,GAJ0C,eAItCxP,KAJsC,EAI/B;EACPuP,QAAAA,MAAM,CAAC6S,KAAP,CAAawM,SAAb,CAAuB5uB,KAAvB,EAA8BsG,IAA9B,CAAmC,YAAM;EACrCiR,UAAAA,MAAM,GAAGvX,KAAT;EACAuF,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,cAAxC;EACH,SAHD;EAIH;EATyC,KAA9C,EAlJI;;EAAA,QA+JEoN,KA/JF,GA+JYrM,MAAM,CAAC3D,MA/JnB,CA+JEgQ,KA/JF;EAgKJtb,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,MAAAA,GADyC,iBACnC;EACF,eAAO2X,KAAP;EACH,OAHwC;EAIzCpM,MAAAA,GAJyC,eAIrCxP,KAJqC,EAI9B;EACP,YAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAA3C;EAEAuP,QAAAA,MAAM,CAAC6S,KAAP,CAAawM,SAAb,CAAuBtqB,MAAM,GAAG,CAAH,GAAOiL,MAAM,CAAC3D,MAAP,CAAc2L,MAAlD,EAA0DjR,IAA1D,CAA+D,YAAM;EACjEsV,UAAAA,KAAK,GAAGtX,MAAR;EACAiB,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,cAAxC;EACH,SAHD;EAIH;EAXwC,KAA7C,EAhKI;;EAAA,QA+KEkV,IA/KF,GA+KWnU,MAAM,CAAC3D,MA/KlB,CA+KE8X,IA/KF;EAgLJpjB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,MAApC,EAA4C;EACxCvK,MAAAA,GADwC,iBAClC;EACF,eAAOyf,IAAP;EACH,OAHuC;EAIxClU,MAAAA,GAJwC,eAIpCxP,KAJoC,EAI7B;EACP,YAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4BuP,MAAM,CAAC3D,MAAP,CAAc8X,IAAd,CAAmBhC,MAA9D;EAEAnS,QAAAA,MAAM,CAAC6S,KAAP,CAAa4M,OAAb,CAAqB1qB,MAArB,EAA6BgC,IAA7B,CAAkC,YAAM;EACpCod,UAAAA,IAAI,GAAGpf,MAAP;EACH,SAFD;EAGH;EAVuC,KAA5C,EAhLI;;EA8LJ,QAAI2qB,UAAJ;EACA1f,IAAAA,MAAM,CAAC6S,KAAP,CACK8M,WADL,GAEK5oB,IAFL,CAEU,UAAAmB,KAAK,EAAI;EACXwnB,MAAAA,UAAU,GAAGxnB,KAAb;EACAyO,MAAAA,QAAQ,CAAC0J,eAAT,CAAyB3a,IAAzB,CAA8BsK,MAA9B;EACH,KALL,EAMK+F,KANL,CAMW,UAAAuC,KAAK,EAAI;EACZ,MAAA,MAAI,CAAC1H,KAAL,CAAW2H,IAAX,CAAgBD,KAAhB;EACH,KARL;EAUAvX,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,YAApC,EAAkD;EAC9CvK,MAAAA,GAD8C,iBACxC;EACF,eAAOgrB,UAAP;EACH;EAH6C,KAAlD,EAzMI;;EAgNJ3uB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,MAAAA,GADyC,iBACnC;EACF,eAAOsL,MAAM,CAACE,WAAP,KAAuBF,MAAM,CAACmI,QAArC;EACH;EAHwC,KAA7C,EAhNI;;EAuNJzR,IAAAA,OAAO,CAACye,GAAR,CAAY,CAACnV,MAAM,CAAC6S,KAAP,CAAa+M,aAAb,EAAD,EAA+B5f,MAAM,CAAC6S,KAAP,CAAagN,cAAb,EAA/B,CAAZ,EAA2E9oB,IAA3E,CAAgF,UAAA+oB,UAAU,EAAI;EAC1Frc,MAAAA,KAAK,CAACqQ,KAAN,GAAciK,cAAc,CAAC+B,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAA5B;EACArc,MAAAA,KAAK,CAAC4a,cAAN,CAAqB3oB,IAArB,CAA0B,MAA1B,EAAgC+N,KAAK,CAACqQ,KAAtC;EACH,KAHD,EAvNI;;EA6NJ9T,IAAAA,MAAM,CAAC6S,KAAP,CAAakN,YAAb,CAA0B/f,MAAM,CAAC3D,MAAP,CAAcuX,SAAxC,EAAmD7c,IAAnD,CAAwD,UAAAipB,KAAK,EAAI;EAC7DhgB,MAAAA,MAAM,CAAC3D,MAAP,CAAcuX,SAAd,GAA0BoM,KAA1B;EACH,KAFD,EA7NI;;EAkOJhgB,IAAAA,MAAM,CAAC6S,KAAP,CAAaoN,aAAb,GAA6BlpB,IAA7B,CAAkC,UAAA8M,KAAK,EAAI;EACvC7D,MAAAA,MAAM,CAAC3D,MAAP,CAAcwH,KAAd,GAAsBA,KAAtB;EACAxF,MAAAA,EAAE,CAACqb,QAAH,CAAYhkB,IAAZ,CAAiB,MAAjB;EACH,KAHD,EAlOI;;EAwOJsK,IAAAA,MAAM,CAAC6S,KAAP,CAAaqN,cAAb,GAA8BnpB,IAA9B,CAAmC,UAAAmB,KAAK,EAAI;EACxCgI,MAAAA,WAAW,GAAGhI,KAAd;EACAlC,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACH,KAHD,EAxOI;;EA8OJe,IAAAA,MAAM,CAAC6S,KAAP,CAAasN,WAAb,GAA2BppB,IAA3B,CAAgC,UAAAmB,KAAK,EAAI;EACrC8H,MAAAA,MAAM,CAACf,KAAP,CAAakJ,QAAb,GAAwBjQ,KAAxB;EACAlC,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC;EACH,KAHD,EA9OI;;EAoPJe,IAAAA,MAAM,CAAC6S,KAAP,CAAauN,aAAb,GAA6BrpB,IAA7B,CAAkC,UAAA6X,MAAM,EAAI;EACxC5O,MAAAA,MAAM,CAACf,KAAP,CAAaE,UAAb,GAA0ByP,MAA1B;EACAjH,MAAAA,QAAQ,CAAC+J,KAAT,CAAehc,IAAf,CAAoBsK,MAApB;EACH,KAHD;EAKAA,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,WAAhB,EAA6B,gBAAmB;EAAA,2BAAhB2d,IAAgB;EAAA,UAAhBA,IAAgB,0BAAT,EAAS;EAC5C,UAAMiN,YAAY,GAAGjN,IAAI,CAAC1Y,GAAL,CAAS,UAAAxG,GAAG;EAAA,eAAIgP,SAAS,CAAChP,GAAG,CAACoE,IAAL,CAAb;EAAA,OAAZ,CAArB;EACAqP,MAAAA,QAAQ,CAAC8K,UAAT,CAAoB/c,IAApB,CAAyBsK,MAAzB,EAAiCqgB,YAAjC;EACH,KAHD;EAKArgB,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,QAAhB,EAA0B,YAAM;EAC5B;EACAuK,MAAAA,MAAM,CAAC6S,KAAP,CAAayN,SAAb,GAAyBvpB,IAAzB,CAA8B,UAAAoJ,MAAM,EAAI;EACpCge,QAAAA,mBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,CAACG,MAAlC;;EACA,YAAI,CAACA,MAAL,EAAa;EACTnK,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,SAAxC;EACH;EACJ,OALD;;EAOA,UAAI/J,EAAE,CAACpB,OAAH,CAAWkM,MAAM,CAAC6S,KAAP,CAAa/e,OAAxB,KAAoCkM,MAAM,CAACzL,SAAP,CAAiB8J,EAAzD,EAA6D;EACzD,YAAMkiB,KAAK,GAAGvgB,MAAM,CAAC6S,KAAP,CAAa/e,OAA3B,CADyD;EAIzD;;EACAysB,QAAAA,KAAK,CAACnoB,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;EACH;EACJ,KAhBD;EAkBA4H,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,MAAhB,EAAwB,YAAM;EAC1B0oB,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;EACAhK,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,SAAxC;EACH,KAHD;EAKAe,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,OAAhB,EAAyB,YAAM;EAC3B0oB,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;EACH,KAFD;EAIAA,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,YAAhB,EAA8B,UAAA+P,IAAI,EAAI;EAClCxF,MAAAA,MAAM,CAACf,KAAP,CAAawO,OAAb,GAAuB,KAAvB;EACAvN,MAAAA,WAAW,GAAGsF,IAAI,CAACgb,OAAnB;EACAxqB,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACH,KAJD;EAMAe,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,UAAhB,EAA4B,UAAA+P,IAAI,EAAI;EAChCxF,MAAAA,MAAM,CAACf,KAAP,CAAa0N,QAAb,GAAwBnH,IAAI,CAACoH,OAA7B;EACA5W,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,UAAxC,EAFgC;;EAKhC,UAAIgH,QAAQ,CAACT,IAAI,CAACoH,OAAN,EAAe,EAAf,CAAR,KAA+B,CAAnC,EAAsC;EAClC5W,QAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC;EACH,OAP+B;EAUhC;;;EACAe,MAAAA,MAAM,CAAC6S,KAAP,CAAasN,WAAb,GAA2BppB,IAA3B,CAAgC,UAAAmB,KAAK,EAAI;EACrC,YAAIA,KAAK,KAAK8H,MAAM,CAACf,KAAP,CAAakJ,QAA3B,EAAqC;EACjCnI,UAAAA,MAAM,CAACf,KAAP,CAAakJ,QAAb,GAAwBjQ,KAAxB;EACAlC,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC;EACH;EACJ,OALD;EAMH,KAjBD;EAmBAe,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,QAAhB,EAA0B,YAAM;EAC5BuK,MAAAA,MAAM,CAACf,KAAP,CAAawO,OAAb,GAAuB,KAAvB;EACAzX,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,QAAxC;EACH,KAHD;EAKAe,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,OAAhB,EAAyB,YAAM;EAC3BuK,MAAAA,MAAM,CAACf,KAAP,CAAakB,MAAb,GAAsB,IAAtB;EACAnK,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,OAAxC;EACH,KAHD;EAKAe,IAAAA,MAAM,CAAC6S,KAAP,CAAapd,EAAb,CAAgB,OAAhB,EAAyB,UAAAS,MAAM,EAAI;EAC/B8J,MAAAA,MAAM,CAACf,KAAP,CAAaqJ,KAAb,GAAqBpS,MAArB;EACAF,MAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,OAAxC;EACH,KAHD,EA5TI;;EAkUJe,IAAAA,MAAM,CAACvK,EAAP,CAAU,gCAAV,EAA4C,UAAAzB,KAAK,EAAI;EAAA,UACzC0E,MADyC,GAC9BsH,MAAM,CAAC4H,UADuB,CACzClP,MADyC;;EAIjD,UAAIA,MAAM,KAAKsH,MAAM,CAACnJ,QAAP,CAAgBC,SAA/B,EAA0C;EACtC;EACH;;EAED,UAAM/B,MAAM,GAAGf,KAAK,CAACsB,IAAN,KAAe,iBAA9B;;EARiD,kCASlCmO,KAAK,CAACqQ,KAAN,CAAY1e,KAAZ,CAAkB,GAAlB,EAAuBsF,GAAvB,CAA2BzJ,MAA3B,CATkC;EAAA;EAAA,UAS1CkmB,CAT0C;EAAA,UASvCE,CATuC;;EAUjD,UAAMoJ,SAAS,GAAGtJ,CAAC,GAAGE,CAAJ,GAAQ,OAAR,GAAkB,QAApC;EAEA3e,MAAAA,MAAM,CAACmE,KAAP,CAAa4jB,SAAb,IAA0B1rB,MAAM,aAAM0O,KAAK,CAAC8a,OAAZ,SAAyB,IAAzD;EACH,KAbD,EAlUI;;EAkVJ3nB,IAAAA,UAAU,CAAC;EAAA,aAAMyH,EAAE,CAACmb,KAAH,CAAS9jB,IAAT,CAAcsK,MAAd,CAAN;EAAA,KAAD,EAA8B,CAA9B,CAAV;EACH;EA1XS,CAAd;;EC/CA;AACA;EAaA,SAAS4d,SAAT,CAAiBxpB,GAAjB,EAAsB;EAClB,MAAIc,EAAE,CAACb,KAAH,CAASD,GAAT,CAAJ,EAAmB;EACf,WAAO,IAAP;EACH;;EAED,MAAMypB,KAAK,GAAG,8DAAd;EACA,SAAOzpB,GAAG,CAAC4G,KAAJ,CAAU6iB,KAAV,IAAmBnb,MAAM,CAACob,EAA1B,GAA+B1pB,GAAtC;EACH;;;EAGD,SAAS+pB,qBAAT,CAA6B5d,IAA7B,EAAmC;EAC/B,MAAIA,IAAI,IAAI,CAAC,KAAKsS,KAAL,CAAWuL,SAAxB,EAAmC;EAC/B,SAAKvL,KAAL,CAAWuL,SAAX,GAAuB,IAAvB;EACH;;EACD,MAAI,KAAKnf,KAAL,CAAWkB,MAAX,KAAsBI,IAA1B,EAAgC;EAC5B,SAAKtB,KAAL,CAAWkB,MAAX,GAAoB,CAACI,IAArB;EACAvK,IAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCsB,IAAI,GAAG,MAAH,GAAY,OAApD;EACH;EACJ;;EAED,IAAMmD,OAAO,GAAG;EACZgO,EAAAA,KADY,mBACJ;EAAA;;EACJ;EACAlX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcI,OAAf,EAAwB,KAAKoF,MAAL,CAAYC,UAAZ,CAAuBuW,KAA/C,EAAsD,IAAtD,CAAX,CAFI;;EAKJnP,IAAAA,OAAO,CAAC2a,cAAR,CAAuB3oB,IAAvB,CAA4B,IAA5B,EALI;;EAQJ,QAAIR,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACmuB,EAAjB,KAAwBxrB,EAAE,CAACxB,QAAH,CAAYnB,MAAM,CAACmuB,EAAP,CAAUzB,MAAtB,CAA5B,EAA2D;EACvDvb,MAAAA,OAAO,CAACjN,KAAR,CAAcf,IAAd,CAAmB,IAAnB;EACH,KAFD,MAEO;EACH;EACA+nB,MAAAA,UAAU,CAAC,KAAKphB,MAAL,CAAYuU,IAAZ,CAAiBlN,OAAjB,CAAyB8R,GAA1B,CAAV,CAAyCzP,KAAzC,CAA+C,UAAAuC,KAAK,EAAI;EACpD,QAAA,KAAI,CAAC1H,KAAL,CAAW2H,IAAX,CAAgB,4BAAhB,EAA8CD,KAA9C;EACH,OAFD,EAFG;EAOH;;EACA/V,MAAAA,MAAM,CAACouB,uBAAP,GAAiCpuB,MAAM,CAACouB,uBAAP,IAAkC,EAAnE,CARG;;EAWHpuB,MAAAA,MAAM,CAACouB,uBAAP,CAA+BnrB,IAA/B,CAAoC,YAAM;EACtCkO,QAAAA,OAAO,CAACjN,KAAR,CAAcf,IAAd,CAAmB,KAAnB;EACH,OAFD,EAXG;;EAgBHnD,MAAAA,MAAM,CAACquB,uBAAP,GAAiC,YAAM;EACnCruB,QAAAA,MAAM,CAACouB,uBAAP,CAA+BtrB,OAA/B,CAAuC,UAAAP,QAAQ,EAAI;EAC/CA,UAAAA,QAAQ;EACX,SAFD;EAGH,OAJD;EAKH;EACJ,GAjCW;EAmCZ;EACA+rB,EAAAA,QApCY,oBAoCHC,OApCG,EAoCM;EAAA;;EACd;EACA;EACA;EACA,QAAI5rB,EAAE,CAACxB,QAAH,CAAY,KAAKmf,KAAL,CAAWkO,YAAvB,CAAJ,EAA0C;EAAA,kCACpB,KAAKlO,KAAL,CAAWkO,YAAX,EADoB;EAAA,UAC9Bld,KAD8B,yBAC9BA,KAD8B;;EAGtC,UAAI3O,EAAE,CAACb,KAAH,CAASwP,KAAT,CAAJ,EAAqB;EACjB,aAAKxH,MAAL,CAAYwH,KAAZ,GAAoBA,KAApB;EACAxF,QAAAA,EAAE,CAACqb,QAAH,CAAYhkB,IAAZ,CAAiB,IAAjB;EACA;EACH;EACJ,KAZa;;;EAed,QAAMyC,GAAG,GAAG,KAAKkE,MAAL,CAAYtJ,IAAZ,CAAiBwjB,MAA7B;;EACA,QAAIrhB,EAAE,CAAChC,MAAH,CAAUiF,GAAV,KAAkB,CAACjD,EAAE,CAACb,KAAH,CAAS8D,GAAT,CAAvB,EAAsC;EAClC,UAAM/D,GAAG,GAAG8N,MAAM,CAAC,KAAK7F,MAAL,CAAYuU,IAAZ,CAAiBlN,OAAjB,CAAyBtF,GAA1B,EAA+B0iB,OAA/B,EAAwC3oB,GAAxC,CAAlB;EAEAoM,MAAAA,KAAK,CAACnQ,GAAD,CAAL,CACK2C,IADL,CACU,UAAA+O,MAAM,EAAI;EACZ,YAAI5Q,EAAE,CAAC3B,MAAH,CAAUuS,MAAV,CAAJ,EAAuB;EACnB,UAAA,MAAI,CAACzJ,MAAL,CAAYwH,KAAZ,GAAoBiC,MAAM,CAACkb,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwBpd,KAA5C;EACAxF,UAAAA,EAAE,CAACqb,QAAH,CAAYhkB,IAAZ,CAAiB,MAAjB;EACH;EACJ,OANL,EAOKqQ,KAPL,CAOW,YAAM,EAPjB;EAQH;EACJ,GAhEW;EAkEZ;EACAsY,EAAAA,cAnEY,4BAmEK;EACb,QAAMvK,KAAK,GAAG,KAAKzX,MAAL,CAAYyX,KAAZ,CAAkB1e,KAAlB,CAAwB,GAAxB,CAAd;EACA,SAAKyB,QAAL,CAAcI,OAAd,CAAsB4F,KAAtB,CAA4B2hB,aAA5B,aAA+C,MAAM1K,KAAK,CAAC,CAAD,CAAX,GAAiBA,KAAK,CAAC,CAAD,CAArE;EACH,GAtEW;EAwEZ;EACArd,EAAAA,KAzEY,sBAyEJ;EACJ,QAAMuJ,MAAM,GAAG,IAAf,CADI;;EAIJ,QAAMkhB,SAAS,GAAGlhB,MAAM,CAACf,KAAP,CAAaY,YAAb,CAA0B,IAA1B,CAAlB;;EACA,QAAI,CAAC3K,EAAE,CAACb,KAAH,CAAS6sB,SAAT,CAAD,IAAwBA,SAAS,CAAC/tB,UAAV,CAAqB,UAArB,CAA5B,EAA8D;EAC1D;EACH,KAPG;;;EAUJ,QAAIyM,MAAM,GAAGI,MAAM,CAACf,KAAP,CAAaY,YAAb,CAA0B,KAA1B,CAAb,CAVI;;EAaJ,QAAI3K,EAAE,CAACb,KAAH,CAASuL,MAAT,CAAJ,EAAsB;EAClBA,MAAAA,MAAM,GAAGI,MAAM,CAACf,KAAP,CAAaY,YAAb,CAA0B,KAAKxD,MAAL,CAAYtE,UAAZ,CAAuB8a,KAAvB,CAA6B1Y,EAAvD,CAAT;EACH,KAfG;;;EAkBJ,QAAM2mB,OAAO,GAAGlD,SAAO,CAAChe,MAAD,CAAvB;EACA,QAAMzF,EAAE,GAAG2H,UAAU,CAAC9B,MAAM,CAAC/B,QAAR,CAArB,CAnBI;;EAAA,QAsBI4X,MAtBJ,GAsBe7V,MAtBf,CAsBI6V,MAtBJ;;EAyBJ,QAAM/e,SAAS,GAAGuB,aAAa,CAAC,KAAD,EAAQ;EAAE8B,MAAAA,EAAE,EAAFA,EAAF;EAAM0b,MAAAA,MAAM,EAANA;EAAN,KAAR,CAA/B;EACA7V,IAAAA,MAAM,CAACf,KAAP,GAAehG,cAAc,CAACnC,SAAD,EAAYkJ,MAAM,CAACf,KAAnB,CAA7B,CA1BI;;EA6BJ,QAAMkiB,SAAS,GAAG,SAAZA,SAAY,CAAAjf,SAAM;EAAA,kDAAkC4e,OAAlC,cAA6C5e,SAA7C;EAAA,KAAxB,CA7BI;;;EAgCJ6W,IAAAA,SAAS,CAACoI,SAAS,CAAC,QAAD,CAAV,EAAsB,GAAtB,CAAT;EAAA,KACKpb,KADL,CACW;EAAA,aAAMgT,SAAS,CAACoI,SAAS,CAAC,IAAD,CAAV,EAAkB,GAAlB,CAAf;EAAA,KADX;EAAA,KAEKpb,KAFL,CAEW;EAAA,aAAMgT,SAAS,CAACoI,SAAS,CAAC,IAAD,CAAV,CAAf;EAAA,KAFX;EAAA,KAGKpqB,IAHL,CAGU,UAAAkiB,KAAK;EAAA,aAAI5a,EAAE,CAACsb,SAAH,CAAajkB,IAAb,CAAkBsK,MAAlB,EAA0BiZ,KAAK,CAAC3Y,GAAhC,CAAJ;EAAA,KAHf,EAIKvJ,IAJL,CAIU,UAAAoqB,SAAS,EAAI;EACf;EACA,UAAI,CAACA,SAAS,CAACjmB,QAAV,CAAmB,QAAnB,CAAL,EAAmC;EAC/B8E,QAAAA,MAAM,CAACnJ,QAAP,CAAgBgf,MAAhB,CAAuBhZ,KAAvB,CAA6Bmd,cAA7B,GAA8C,OAA9C;EACH;EACJ,KATL,EAUKjU,KAVL,CAUW,YAAM,EAVjB,EAhCI;EA6CJ;;EACA/F,IAAAA,MAAM,CAAC6S,KAAP,GAAe,IAAItgB,MAAM,CAACmuB,EAAP,CAAUzB,MAAd,CAAqB9kB,EAArB,EAAyB;EACpC2mB,MAAAA,OAAO,EAAPA,OADoC;EAEpCM,MAAAA,UAAU,EAAE;EACRzN,QAAAA,QAAQ,EAAE3T,MAAM,CAAC3D,MAAP,CAAcsX,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;EACkC;EAC1C0N,QAAAA,EAAE,EAAErhB,MAAM,CAAC3D,MAAP,CAAcglB,EAFV;EAEc;EACtB1a,QAAAA,QAAQ,EAAE3G,MAAM,CAACzL,SAAP,CAAiB8J,EAAjB,GAAsB,CAAtB,GAA0B,CAH5B;EAG+B;EACvCijB,QAAAA,GAAG,EAAE,CAJG;EAIA;EACRC,QAAAA,QAAQ,EAAE,CALF;EAKK;EACbC,QAAAA,cAAc,EAAE,CANR;EAMW;EACnBC,QAAAA,cAAc,EAAE,CAPR;EAOW;EACnBC,QAAAA,SAAS,EAAE,CARH;EAQM;EACdxjB,QAAAA,WAAW,EAAE,CATL;EASQ;EAEhB;EACA;EACAyjB,QAAAA,eAAe,EAAEpvB,MAAM,GAAGA,MAAM,CAACuU,QAAP,CAAgB6J,IAAnB,GAA0B,IAbzC;EAeR;EACAiR,QAAAA,cAAc,EAAE5hB,MAAM,CAAC2H,QAAP,CAAgBwK,MAAhB,GAAyB,CAAzB,GAA6B,CAhBrC;EAiBR0P,QAAAA,YAAY,EAAE7hB,MAAM,CAAC3D,MAAP,CAAcsL,QAAd,CAAuBoH;EAjB7B,OAFwB;EAqBpC5Z,MAAAA,MAAM,EAAE;EACJ2sB,QAAAA,OADI,mBACI9tB,KADJ,EACW;EACX;EACA,cAAI,CAACgM,MAAM,CAACf,KAAP,CAAaqJ,KAAlB,EAAyB;EACrB,gBAAM0S,IAAI,GAAGhnB,KAAK,CAACwR,IAAnB,CADqB;;EAGrB,gBAAMuc,OAAO,GACT;EACI,iBAAG,sOADP;EAEI,iBAAG,sHAFP;EAGI,mBAAK,oIAHT;EAII,mBAAK,sFAJT;EAKI,mBAAK;EALT,cAME/G,IANF,KAMW,0BAPf;EASAhb,YAAAA,MAAM,CAACf,KAAP,CAAaqJ,KAAb,GAAqB;EAAE0S,cAAAA,IAAI,EAAJA,IAAF;EAAQ+G,cAAAA,OAAO,EAAPA;EAAR,aAArB;EAEA/rB,YAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,OAAxC;EACH;EACJ,SAnBG;EAoBJ+iB,QAAAA,oBApBI,gCAoBiBhuB,KApBjB,EAoBwB;EACxB;EACA,cAAMiuB,QAAQ,GAAGjuB,KAAK,CAAC0E,MAAvB,CAFwB;;EAKxBsH,UAAAA,MAAM,CAACf,KAAP,CAAaijB,YAAb,GAA4BD,QAAQ,CAACE,eAAT,EAA5B;EAEAnsB,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACH,SA5BG;EA6BJmjB,QAAAA,OA7BI,mBA6BIpuB,KA7BJ,EA6BW;EACX;EACA,cAAIkB,EAAE,CAACxB,QAAH,CAAYsM,MAAM,CAACf,KAAP,CAAasB,IAAzB,CAAJ,EAAoC;EAChC;EACH,WAJU;;;EAMX,cAAM0hB,QAAQ,GAAGjuB,KAAK,CAAC0E,MAAvB,CANW;;EASXgL,UAAAA,OAAO,CAACmd,QAAR,CAAiBnrB,IAAjB,CAAsBsK,MAAtB,EAA8B8gB,OAA9B,EATW;;EAYX9gB,UAAAA,MAAM,CAACf,KAAP,CAAasB,IAAb,GAAoB,YAAM;EACtB4d,YAAAA,qBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;EACAiiB,YAAAA,QAAQ,CAACI,SAAT;EACH,WAHD;;EAKAriB,UAAAA,MAAM,CAACf,KAAP,CAAaoI,KAAb,GAAqB,YAAM;EACvB8W,YAAAA,qBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;EACAiiB,YAAAA,QAAQ,CAACK,UAAT;EACH,WAHD;;EAKAtiB,UAAAA,MAAM,CAACf,KAAP,CAAakgB,IAAb,GAAoB,YAAM;EACtB8C,YAAAA,QAAQ,CAACM,SAAT;EACH,WAFD;;EAIAviB,UAAAA,MAAM,CAACf,KAAP,CAAakJ,QAAb,GAAwB8Z,QAAQ,CAAC9B,WAAT,EAAxB;EACAngB,UAAAA,MAAM,CAACf,KAAP,CAAakB,MAAb,GAAsB,IAAtB,CA3BW;;EA8BXH,UAAAA,MAAM,CAACf,KAAP,CAAaiB,WAAb,GAA2B,CAA3B;EACAnP,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,aAApC,EAAmD;EAC/CvK,YAAAA,GAD+C,iBACzC;EACF,qBAAOzD,MAAM,CAACgxB,QAAQ,CAAC/B,cAAT,EAAD,CAAb;EACH,aAH8C;EAI/CjgB,YAAAA,GAJ+C,eAI3CoG,IAJ2C,EAIrC;EACN;EACA,kBAAIrG,MAAM,CAACG,MAAP,IAAiB,CAACH,MAAM,CAAC6S,KAAP,CAAauL,SAAnC,EAA8C;EAC1Cpe,gBAAAA,MAAM,CAAC6S,KAAP,CAAapL,IAAb;EACH,eAJK;;;EAONzH,cAAAA,MAAM,CAACf,KAAP,CAAawO,OAAb,GAAuB,IAAvB;EACAzX,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,SAAxC,EARM;;EAWNgjB,cAAAA,QAAQ,CAAC/E,MAAT,CAAgB7W,IAAhB;EACH;EAhB8C,WAAnD,EA/BW;;EAmDXtV,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,cAApC,EAAoD;EAChDvK,YAAAA,GADgD,iBAC1C;EACF,qBAAOutB,QAAQ,CAACE,eAAT,EAAP;EACH,aAH+C;EAIhDliB,YAAAA,GAJgD,eAI5CxP,KAJ4C,EAIrC;EACPwxB,cAAAA,QAAQ,CAAC1C,eAAT,CAAyB9uB,KAAzB;EACH;EAN+C,WAApD,EAnDW;;EAAA,cA6DLuX,MA7DK,GA6DMhI,MAAM,CAAC3D,MA7Db,CA6DL2L,MA7DK;EA8DXjX,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,QAApC,EAA8C;EAC1CvK,YAAAA,GAD0C,iBACpC;EACF,qBAAOsT,MAAP;EACH,aAHyC;EAI1C/H,YAAAA,GAJ0C,eAItCxP,KAJsC,EAI/B;EACPuX,cAAAA,MAAM,GAAGvX,KAAT;EACAwxB,cAAAA,QAAQ,CAAC5C,SAAT,CAAmBrX,MAAM,GAAG,GAA5B;EACAhS,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,cAAxC;EACH;EARyC,WAA9C,EA9DW;;EAAA,cA0ELoN,KA1EK,GA0EKrM,MAAM,CAAC3D,MA1EZ,CA0ELgQ,KA1EK;EA2EXtb,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,YAAAA,GADyC,iBACnC;EACF,qBAAO2X,KAAP;EACH,aAHwC;EAIzCpM,YAAAA,GAJyC,eAIrCxP,KAJqC,EAI9B;EACP,kBAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B4b,KAA3C;EACAA,cAAAA,KAAK,GAAGtX,MAAR;EACAktB,cAAAA,QAAQ,CAACltB,MAAM,GAAG,MAAH,GAAY,QAAnB,CAAR;EACAiB,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,cAAxC;EACH;EATwC,WAA7C,EA3EW;;EAwFXlO,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,YAApC,EAAkD;EAC9CvK,YAAAA,GAD8C,iBACxC;EACF,qBAAOutB,QAAQ,CAACtC,WAAT,EAAP;EACH;EAH6C,WAAlD,EAxFW;;EA+FX5uB,UAAAA,MAAM,CAAC0D,cAAP,CAAsBuL,MAAM,CAACf,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,YAAAA,GADyC,iBACnC;EACF,qBAAOsL,MAAM,CAACE,WAAP,KAAuBF,MAAM,CAACmI,QAArC;EACH;EAHwC,WAA7C,EA/FW;;EAsGXnI,UAAAA,MAAM,CAACxL,OAAP,CAAeuX,KAAf,GAAuBkW,QAAQ,CAACO,yBAAT,EAAvB,CAtGW;;EAyGX,cAAIxiB,MAAM,CAACzL,SAAP,CAAiB8J,EAArB,EAAyB;EACrB2B,YAAAA,MAAM,CAACf,KAAP,CAAa7G,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;EACH;;EAEDpC,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACAjJ,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC,EA9GW;;EAiHXwjB,UAAAA,aAAa,CAACziB,MAAM,CAACoa,MAAP,CAAcsI,SAAf,CAAb,CAjHW;;EAoHX1iB,UAAAA,MAAM,CAACoa,MAAP,CAAcsI,SAAd,GAA0BC,WAAW,CAAC,YAAM;EACxC;EACA3iB,YAAAA,MAAM,CAACf,KAAP,CAAa0N,QAAb,GAAwBsV,QAAQ,CAACW,sBAAT,EAAxB,CAFwC;;EAKxC,gBAAI5iB,MAAM,CAACf,KAAP,CAAa4jB,YAAb,KAA8B,IAA9B,IAAsC7iB,MAAM,CAACf,KAAP,CAAa4jB,YAAb,GAA4B7iB,MAAM,CAACf,KAAP,CAAa0N,QAAnF,EAA6F;EACzF3W,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,UAAxC;EACH,aAPuC;;;EAUxCe,YAAAA,MAAM,CAACf,KAAP,CAAa4jB,YAAb,GAA4B7iB,MAAM,CAACf,KAAP,CAAa0N,QAAzC,CAVwC;;EAaxC,gBAAI3M,MAAM,CAACf,KAAP,CAAa0N,QAAb,KAA0B,CAA9B,EAAiC;EAC7B8V,cAAAA,aAAa,CAACziB,MAAM,CAACoa,MAAP,CAAcsI,SAAf,CAAb,CAD6B;;EAI7B1sB,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC;EACH;EACJ,WAnBoC,EAmBlC,GAnBkC,CAArC,CApHW;;EA0IXrI,UAAAA,UAAU,CAAC;EAAA,mBAAMyH,EAAE,CAACmb,KAAH,CAAS9jB,IAAT,CAAcsK,MAAd,CAAN;EAAA,WAAD,EAA8B,EAA9B,CAAV;EACH,SAxKG;EAyKJ8iB,QAAAA,aAzKI,yBAyKU9uB,KAzKV,EAyKiB;EACjB;EACA,cAAMiuB,QAAQ,GAAGjuB,KAAK,CAAC0E,MAAvB,CAFiB;;EAKjB+pB,UAAAA,aAAa,CAACziB,MAAM,CAACoa,MAAP,CAAcpE,OAAf,CAAb;EAEA,cAAM+M,MAAM,GAAG/iB,MAAM,CAACf,KAAP,CAAawO,OAAb,IAAwB,CAAC,CAAD,EAAI,CAAJ,EAAOvS,QAAP,CAAgBlH,KAAK,CAACwR,IAAtB,CAAvC;;EAEA,cAAIud,MAAJ,EAAY;EACR;EACA/iB,YAAAA,MAAM,CAACf,KAAP,CAAawO,OAAb,GAAuB,KAAvB;EACAzX,YAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,QAAxC;EACH,WAbgB;EAgBjB;EACA;EACA;EACA;EACA;EACA;;;EACA,kBAAQjL,KAAK,CAACwR,IAAd;EACI,iBAAK,CAAC,CAAN;EACI;EACAxP,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC,EAFJ;;EAKIe,cAAAA,MAAM,CAACf,KAAP,CAAa0N,QAAb,GAAwBsV,QAAQ,CAACW,sBAAT,EAAxB;EACA5sB,cAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,UAAxC;EAEA;;EAEJ,iBAAK,CAAL;EACIkf,cAAAA,qBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC,EADJ;;EAII,kBAAIA,MAAM,CAACf,KAAP,CAAakV,IAAjB,EAAuB;EACnB;EACA8N,gBAAAA,QAAQ,CAACM,SAAT;EACAN,gBAAAA,QAAQ,CAACI,SAAT;EACH,eAJD,MAIO;EACHrsB,gBAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,OAAxC;EACH;;EAED;;EAEJ,iBAAK,CAAL;EACI;EACA,kBAAIe,MAAM,CAACf,KAAP,CAAakB,MAAb,IAAuB,CAACH,MAAM,CAAC6S,KAAP,CAAauL,SAAzC,EAAoD;EAChDpe,gBAAAA,MAAM,CAACf,KAAP,CAAaoI,KAAb;EACH,eAFD,MAEO;EACH8W,gBAAAA,qBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;EAEAhK,gBAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,SAAxC,EAHG;;EAMHe,gBAAAA,MAAM,CAACoa,MAAP,CAAcpE,OAAd,GAAwB2M,WAAW,CAAC,YAAM;EACtC3sB,kBAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,YAAxC;EACH,iBAFkC,EAEhC,EAFgC,CAAnC,CANG;EAWH;EACA;;EACA,oBAAIe,MAAM,CAACf,KAAP,CAAakJ,QAAb,KAA0B8Z,QAAQ,CAAC9B,WAAT,EAA9B,EAAsD;EAClDngB,kBAAAA,MAAM,CAACf,KAAP,CAAakJ,QAAb,GAAwB8Z,QAAQ,CAAC9B,WAAT,EAAxB;EACAnqB,kBAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACf,KAAjC,EAAwC,gBAAxC;EACH;EACJ;;EAED;;EAEJ,iBAAK,CAAL;EACI;EACA,kBAAI,CAACe,MAAM,CAACqM,KAAZ,EAAmB;EACfrM,gBAAAA,MAAM,CAAC6S,KAAP,CAAamQ,MAAb;EACH;;EACD7E,cAAAA,qBAAmB,CAACzoB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;EAEA;;EAEJ;EACI;EA5DR;;EA+DAhK,UAAAA,YAAY,CAACN,IAAb,CAAkBsK,MAAlB,EAA0BA,MAAM,CAACnJ,QAAP,CAAgBC,SAA1C,EAAqD,aAArD,EAAoE,KAApE,EAA2E;EACvEkkB,YAAAA,IAAI,EAAEhnB,KAAK,CAACwR;EAD2D,WAA3E;EAGH;EAjQG;EArB4B,KAAzB,CAAf;EAyRH;EAhZW,CAAhB;;EClCA;AACA,EAQA,IAAMvG,KAAK,GAAG;EACV;EACAyS,EAAAA,KAFU,mBAEF;EACJ;EACA,QAAI,CAAC,KAAKzS,KAAV,EAAiB;EACb,WAAK2B,KAAL,CAAW2H,IAAX,CAAgB,yBAAhB;EACA;EACH,KALG;;;EAQJ/N,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBhH,IAAvB,CAA4BuE,OAA5B,CAAoC,KAApC,EAA2C,KAAKvE,IAAhD,CAA1B,EAAiF,IAAjF,CAAX,CARI;;EAWJkF,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB2B,QAAvB,CAAgCpE,OAAhC,CAAwC,KAAxC,EAA+C,KAAKoE,QAApD,CAA1B,EAAyF,IAAzF,CAAX,CAXI;EAcJ;;EACA,QAAI,KAAK4S,OAAT,EAAkB;EACdrW,MAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuBhH,IAAvB,CAA4BuE,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAA1B,EAA+E,IAA/E,CAAX;EACH,KAjBG;;;EAoBJ,QAAI,KAAK8X,OAAT,EAAkB;EACd;EACA,WAAK9a,QAAL,CAAcI,OAAd,GAAwBoB,aAAa,CAAC,KAAD,EAAQ;EACzC6B,QAAAA,KAAK,EAAE,KAAKmC,MAAL,CAAYC,UAAZ,CAAuByB;EADW,OAAR,CAArC,CAFc;;EAOd/G,MAAAA,IAAI,CAAC,KAAKiI,KAAN,EAAa,KAAKpI,QAAL,CAAcI,OAA3B,CAAJ,CAPc;;EAUd,WAAKJ,QAAL,CAAcgf,MAAd,GAAuBxd,aAAa,CAAC,KAAD,EAAQ;EACxC6B,QAAAA,KAAK,EAAE,KAAKmC,MAAL,CAAYC,UAAZ,CAAuBuZ;EADU,OAAR,CAApC;EAIA,WAAKhf,QAAL,CAAcI,OAAd,CAAsBW,WAAtB,CAAkC,KAAKf,QAAL,CAAcgf,MAAhD;EACH;;EAED,QAAI,KAAK7W,OAAT,EAAkB;EACdS,MAAAA,KAAK,CAACM,MAAN,CAAarK,IAAb,CAAkB,IAAlB;EACH,KAFD,MAEO,IAAI,KAAKkc,SAAT,EAAoB;EACvBlO,MAAAA,OAAO,CAACgO,KAAR,CAAchc,IAAd,CAAmB,IAAnB;EACH,KAFM,MAEA,IAAI,KAAKwZ,OAAT,EAAkB;EACrBzL,MAAAA,KAAK,CAACiO,KAAN,CAAYhc,IAAZ,CAAiB,IAAjB;EACH;EACJ;EA9CS,CAAd;;MCOMutB;;;EACF;;;;;EAKA,eAAYjjB,MAAZ,EAAoB;EAAA;;EAAA;;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACA,SAAKwW,WAAL,GAAmBxW,MAAM,CAAC3D,MAAP,CAAc0Z,GAAd,CAAkBS,WAArC;EACA,SAAKR,OAAL,GAAe,KAAf;EACA,SAAKgG,WAAL,GAAmB,KAAnB;EACA,SAAKnlB,QAAL,GAAgB;EACZC,MAAAA,SAAS,EAAE,IADC;EAEZosB,MAAAA,gBAAgB,EAAE;EAFN,KAAhB;EAIA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKluB,MAAL,GAAc,EAAd;EACA,SAAKmuB,WAAL,GAAmB,IAAnB;EACA,SAAKC,cAAL,GAAsB,IAAtB,CAdgB;;EAiBhB,SAAKtH,cAAL,GAAsB,IAAIvlB,OAAJ,CAAY,UAACC,OAAD,EAAU8N,MAAV,EAAqB;EACnD;EACA,MAAA,KAAI,CAAChP,EAAL,CAAQ,QAAR,EAAkBkB,OAAlB,EAFmD;;;EAKnD,MAAA,KAAI,CAAClB,EAAL,CAAQ,OAAR,EAAiBgP,MAAjB;EACH,KANqB,CAAtB;EAQA,SAAKjE,IAAL;EACH;;;;;EAQD;;;6BAGO;EAAA;;EACH,UAAI,KAAKuD,OAAT,EAAkB;EACd;EACA,YAAI,CAAC7O,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACgkB,MAAjB,CAAD,IAA6B,CAACrhB,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACgkB,MAAP,CAAciN,GAAxB,CAAlC,EAAgE;EAC5D/F,UAAAA,UAAU,CAAC,KAAKzd,MAAL,CAAY3D,MAAZ,CAAmBuU,IAAnB,CAAwB8E,SAAxB,CAAkCF,GAAnC,CAAV,CACKze,IADL,CACU,YAAM;EACR,YAAA,MAAI,CAACN,KAAL;EACH,WAHL,EAIKsP,KAJL,CAIW,YAAM;EACT;EACA,YAAA,MAAI,CAAC0d,OAAL,CAAa,OAAb,EAAsB,IAAI3e,KAAJ,CAAU,+BAAV,CAAtB;EACH,WAPL;EAQH,SATD,MASO;EACH,eAAKrO,KAAL;EACH;EACJ;EACJ;EAED;;;;;;iCAGQ;EAAA;;EACJ;EACA;EACA,WAAKitB,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B,EAHI;;EAMJ,WAAKzH,cAAL,CAAoBllB,IAApB,CAAyB,YAAM;EAC3B,QAAA,MAAI,CAAC4sB,gBAAL,CAAsB,sBAAtB;EACH,OAFD,EANI;;EAWJ,WAAK/X,SAAL,GAXI;;EAcJ,WAAKgY,QAAL;EACH;;;;;EAmBD;;;;;;;;iCAQW;EACP;EACA,WAAK/sB,QAAL,CAAcC,SAAd,GAA0BuB,aAAa,CAAC,KAAD,EAAQ;EAC3C6B,QAAAA,KAAK,EAAE,KAAK8F,MAAL,CAAY3D,MAAZ,CAAmBC,UAAnB,CAA8ByZ;EADM,OAAR,CAAvC;EAGA,WAAK/V,MAAL,CAAYnJ,QAAZ,CAAqBC,SAArB,CAA+Bc,WAA/B,CAA2C,KAAKf,QAAL,CAAcC,SAAzD,EALO;;EAQPyf,MAAAA,MAAM,CAACiN,GAAP,CAAW9b,QAAX,CAAoBmc,YAApB,CAAiCtN,MAAM,CAACiN,GAAP,CAAWM,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE,EARO;;EAWPzN,MAAAA,MAAM,CAACiN,GAAP,CAAW9b,QAAX,CAAoBuc,SAApB,CAA8B,KAAKjkB,MAAL,CAAY3D,MAAZ,CAAmB0Z,GAAnB,CAAuBhH,QAArD,EAXO;EAcP;;EACA,WAAKlY,QAAL,CAAcqsB,gBAAd,GAAiC,IAAI3M,MAAM,CAACiN,GAAP,CAAWU,kBAAf,CAAkC,KAAKrtB,QAAL,CAAcC,SAAhD,CAAjC,CAfO;;EAkBP,WAAKqtB,UAAL;EACH;EAED;;;;;;mCAGa;EAAA;;EAAA,UACDrtB,SADC,GACa,KAAKkJ,MAAL,CAAYnJ,QADzB,CACDC,SADC;;EAGT,UAAI;EACA;EACA,aAAKssB,MAAL,GAAc,IAAI7M,MAAM,CAACiN,GAAP,CAAWY,SAAf,CAAyB,KAAKvtB,QAAL,CAAcqsB,gBAAvC,CAAd,CAFA;;EAKA,aAAKE,MAAL,CAAYzuB,gBAAZ,CACI4hB,MAAM,CAACiN,GAAP,CAAWa,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAD1C,EAEI,UAAAvwB,KAAK;EAAA,iBAAI,MAAI,CAACwwB,kBAAL,CAAwBxwB,KAAxB,CAAJ;EAAA,SAFT,EAGI,KAHJ;EAKA,aAAKovB,MAAL,CAAYzuB,gBAAZ,CAA6B4hB,MAAM,CAACiN,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE,UAAApc,KAAK;EAAA,iBAAI,MAAI,CAACqc,SAAL,CAAerc,KAAf,CAAJ;EAAA,SAAzE,EAAoG,KAApG,EAVA;;EAaA,YAAM5D,OAAO,GAAG,IAAI6R,MAAM,CAACiN,GAAP,CAAWoB,UAAf,EAAhB;EACAlgB,QAAAA,OAAO,CAACmgB,QAAR,GAAmB,KAAKC,MAAxB,CAdA;EAiBA;;EACApgB,QAAAA,OAAO,CAACqgB,iBAAR,GAA4BjuB,SAAS,CAACkuB,WAAtC;EACAtgB,QAAAA,OAAO,CAACugB,kBAAR,GAA6BnuB,SAAS,CAACkG,YAAvC;EACA0H,QAAAA,OAAO,CAACwgB,oBAAR,GAA+BpuB,SAAS,CAACkuB,WAAzC;EACAtgB,QAAAA,OAAO,CAACygB,qBAAR,GAAgCruB,SAAS,CAACkG,YAA1C,CArBA;;EAwBA0H,QAAAA,OAAO,CAAC0gB,sBAAR,GAAiC,KAAjC,CAxBA;;EA2BA1gB,QAAAA,OAAO,CAAC2gB,kBAAR,CAA2B,CAAC,KAAKrlB,MAAL,CAAYqM,KAAxC;EAEA,aAAK+W,MAAL,CAAYe,UAAZ,CAAuBzf,OAAvB;EACH,OA9BD,CA8BE,OAAOrR,CAAP,EAAU;EACR,aAAKsxB,SAAL,CAAetxB,CAAf;EACH;EACJ;EAED;;;;;;;sCAI6B;EAAA;;EAAA,UAAf2G,KAAe,uEAAP,KAAO;;EACzB,UAAI,CAACA,KAAL,EAAY;EACRyoB,QAAAA,aAAa,CAAC,KAAKc,cAAN,CAAb;EACA,aAAK1sB,QAAL,CAAcC,SAAd,CAAwByD,eAAxB,CAAwC,iBAAxC;EACA;EACH;;EAED,UAAMgL,MAAM,GAAG,SAATA,MAAS,GAAM;EACjB,YAAMc,IAAI,GAAGD,UAAU,CAAChF,IAAI,CAACmB,GAAL,CAAS,MAAI,CAAC4gB,OAAL,CAAamC,gBAAb,EAAT,EAA0C,CAA1C,CAAD,CAAvB;EACA,YAAM3b,KAAK,aAAMhG,IAAI,CAACjP,GAAL,CAAS,eAAT,EAA0B,MAAI,CAACsL,MAAL,CAAY3D,MAAtC,CAAN,gBAAyDgK,IAAzD,CAAX;;EACA,QAAA,MAAI,CAACxP,QAAL,CAAcC,SAAd,CAAwBsB,YAAxB,CAAqC,iBAArC,EAAwDuR,KAAxD;EACH,OAJD;;EAMA,WAAK4Z,cAAL,GAAsBZ,WAAW,CAACpd,MAAD,EAAS,GAAT,CAAjC;EACH;EAED;;;;;;;yCAImBvR,OAAO;EAAA;;EACtB;EACA,UAAI,CAAC,KAAK+P,OAAV,EAAmB;EACf;EACH,OAJqB;;;EAOtB,UAAM2D,QAAQ,GAAG,IAAI6O,MAAM,CAACiN,GAAP,CAAW+B,oBAAf,EAAjB,CAPsB;;EAUtB7d,MAAAA,QAAQ,CAAC8d,2CAAT,GAAuD,IAAvD;EACA9d,MAAAA,QAAQ,CAAC+d,gBAAT,GAA4B,IAA5B,CAXsB;EActB;;EACA,WAAKtC,OAAL,GAAenvB,KAAK,CAAC0xB,aAAN,CAAoB,KAAK1lB,MAAzB,EAAiC0H,QAAjC,CAAf,CAfsB;;EAkBtB,WAAK2b,SAAL,GAAiB,KAAKF,OAAL,CAAawC,YAAb,EAAjB,CAlBsB;;EAqBtB,UAAI,CAACzwB,EAAE,CAACb,KAAH,CAAS,KAAKgvB,SAAd,CAAL,EAA+B;EAC3B,aAAKA,SAAL,CAAehuB,OAAf,CAAuB,UAAAuwB,QAAQ,EAAI;EAC/B,cAAIA,QAAQ,KAAK,CAAb,IAAkBA,QAAQ,KAAK,CAAC,CAAhC,IAAqCA,QAAQ,GAAG,MAAI,CAAC5lB,MAAL,CAAYmI,QAAhE,EAA0E;EACtE,gBAAM0d,WAAW,GAAG,MAAI,CAAC7lB,MAAL,CAAYnJ,QAAZ,CAAqBgR,QAAzC;;EAEA,gBAAI3S,EAAE,CAACpB,OAAH,CAAW+xB,WAAX,CAAJ,EAA6B;EACzB,kBAAMC,aAAa,GAAG,MAAM,MAAI,CAAC9lB,MAAL,CAAYmI,QAAlB,GAA6Byd,QAAnD;EACA,kBAAM1xB,GAAG,GAAGmE,aAAa,CAAC,MAAD,EAAS;EAC9B6B,gBAAAA,KAAK,EAAE,MAAI,CAAC8F,MAAL,CAAY3D,MAAZ,CAAmBC,UAAnB,CAA8B8W;EADP,eAAT,CAAzB;EAIAlf,cAAAA,GAAG,CAAC2I,KAAJ,CAAUwQ,IAAV,aAAoByY,aAAa,CAAC3jB,QAAd,EAApB;EACA0jB,cAAAA,WAAW,CAACjuB,WAAZ,CAAwB1D,GAAxB;EACH;EACJ;EACJ,SAdD;EAeH,OArCqB;;;EAwCtB,WAAKivB,OAAL,CAAa9D,SAAb,CAAuB,KAAKrf,MAAL,CAAYgI,MAAnC,EAxCsB;EA2CtB;;EACA,WAAKmb,OAAL,CAAaxuB,gBAAb,CAA8B4hB,MAAM,CAACiN,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE,UAAApc,KAAK;EAAA,eAAI,MAAI,CAACqc,SAAL,CAAerc,KAAf,CAAJ;EAAA,OAA1E,EA5CsB;;EA+CtBvX,MAAAA,MAAM,CAACgC,IAAP,CAAYwjB,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAA/B,EAAqCjvB,OAArC,CAA6C,UAAAC,IAAI,EAAI;EACjD,QAAA,MAAI,CAAC6tB,OAAL,CAAaxuB,gBAAb,CAA8B4hB,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBhvB,IAAxB,CAA9B,EAA6D,UAAAtB,KAAK;EAAA,iBAAI,MAAI,CAACgyB,SAAL,CAAehyB,KAAf,CAAJ;EAAA,SAAlE;EACH,OAFD,EA/CsB;;EAoDtB,WAAKyvB,OAAL,CAAa,QAAb;EACH;EAED;;;;;;;;;gCAMUzvB,OAAO;EAAA;;EAAA,UACL8C,SADK,GACS,KAAKkJ,MAAL,CAAYnJ,QADrB,CACLC,SADK;EAIb;;EACA,UAAMmvB,EAAE,GAAGjyB,KAAK,CAACkyB,KAAN,EAAX,CALa;;EAQb,UAAM5vB,aAAa,GAAG,SAAhBA,aAAgB,CAAAhB,IAAI,EAAI;EAC1B,YAAMtB,KAAK,gBAASsB,IAAI,CAACuE,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuBiJ,WAAvB,EAAT,CAAX;EACA9M,QAAAA,YAAY,CAACN,IAAb,CAAkB,MAAI,CAACsK,MAAvB,EAA+B,MAAI,CAACA,MAAL,CAAYf,KAA3C,EAAkDjL,KAAlD;EACH,OAHD;;EAKA,cAAQA,KAAK,CAACsB,IAAd;EACI,aAAKihB,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;EACI;EACA;EACA,eAAK1C,OAAL,CAAa,QAAb,EAHJ;;EAMIntB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb,CANJ;;EASI,eAAK8wB,aAAL,CAAmB,IAAnB;;EAEA,cAAI,CAACH,EAAE,CAACI,QAAH,EAAL,EAAoB;EAChB;EACAJ,YAAAA,EAAE,CAAC9Y,KAAH,GAAWrW,SAAS,CAACkuB,WAArB;EACAiB,YAAAA,EAAE,CAACjW,MAAH,GAAYlZ,SAAS,CAACkG,YAAtB;EACH,WAfL;EAkBI;;;EACA;;EAEJ,aAAKuZ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;EACI;EACA;EAEA;EACAhwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb,CALJ;EAQI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;EAEA,eAAKixB,OAAL;EACA;;EAEJ,aAAKhQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;EACI;EACA;EACA;EAEAlwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EAEA,eAAKmxB,YAAL;EAEA;;EAEJ,aAAKlQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;EACI;EACA;EACA;EACA;EAEApwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EAEA,eAAK8wB,aAAL;EAEA,eAAKO,aAAL;EAEA;;EAEJ,aAAKpQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;EACA,aAAKrQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;EACA,aAAKtQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;EACA,aAAKvQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;EACA,aAAKxQ,MAAM,CAACiN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;EACI1wB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EACA;;EAEJ;EACI;EAzFR;EA2FH;EAED;;;;;;;gCAIUtB,OAAO;EACb,WAAKizB,MAAL;EACA,WAAKjnB,MAAL,CAAYY,KAAZ,CAAkB2H,IAAlB,CAAuB,WAAvB,EAAoCvU,KAApC;EACH;EAED;;;;;;;;kCAKY;EAAA;;EAAA,UACA8C,SADA,GACc,KAAKkJ,MAAL,CAAYnJ,QAD1B,CACAC,SADA;EAER,UAAIuP,IAAJ,CAFQ;;EAKR,WAAKrG,MAAL,CAAYvK,EAAZ,CAAe,OAAf,EAAwB,YAAM;EAC1B,QAAA,MAAI,CAAC2tB,MAAL,CAAY8D,eAAZ;EACH,OAFD;EAIA,WAAKlnB,MAAL,CAAYvK,EAAZ,CAAe,SAAf,EAA0B,YAAM;EAC5B4Q,QAAAA,IAAI,GAAG,MAAI,CAACrG,MAAL,CAAYE,WAAnB;EACA,eAAOmG,IAAP;EACH,OAHD;EAKA,WAAKrG,MAAL,CAAYvK,EAAZ,CAAe,QAAf,EAAyB,YAAM;EAC3B,YAAM0xB,UAAU,GAAG,MAAI,CAACnnB,MAAL,CAAYE,WAA/B;;EAEA,YAAIhL,EAAE,CAACb,KAAH,CAAS,MAAI,CAACgvB,SAAd,CAAJ,EAA8B;EAC1B;EACH;;EAED,QAAA,MAAI,CAACA,SAAL,CAAehuB,OAAf,CAAuB,UAACuwB,QAAD,EAAWvuB,KAAX,EAAqB;EACxC,cAAIgP,IAAI,GAAGuf,QAAP,IAAmBA,QAAQ,GAAGuB,UAAlC,EAA8C;EAC1C,YAAA,MAAI,CAAChE,OAAL,CAAaiE,cAAb;;EACA,YAAA,MAAI,CAAC/D,SAAL,CAAegE,MAAf,CAAsBhwB,KAAtB,EAA6B,CAA7B;EACH;EACJ,SALD;EAMH,OAbD,EAdQ;EA8BR;;EACA9E,MAAAA,MAAM,CAACoC,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;EACpC,YAAI,MAAI,CAACwuB,OAAT,EAAkB;EACd,UAAA,MAAI,CAACA,OAAL,CAAamE,MAAb,CAAoBxwB,SAAS,CAACkuB,WAA9B,EAA2CluB,SAAS,CAACkG,YAArD,EAAmEuZ,MAAM,CAACiN,GAAP,CAAW+D,QAAX,CAAoBC,MAAvF;EACH;EACJ,OAJD;EAKH;EAED;;;;;;6BAGO;EAAA;;EAAA,UACK1wB,SADL,GACmB,KAAKkJ,MAAL,CAAYnJ,QAD/B,CACKC,SADL;;EAGH,UAAI,CAAC,KAAKmlB,cAAV,EAA0B;EACtB,aAAK0K,aAAL;EACH,OALE;;;EAQH,WAAK1K,cAAL,CACKllB,IADL,CACU,YAAM;EACR;EACA,QAAA,MAAI,CAACF,QAAL,CAAcqsB,gBAAd,CAA+BuE,UAA/B;;EAEA,YAAI;EACA,cAAI,CAAC,MAAI,CAACzL,WAAV,EAAuB;EACnB;EACA,YAAA,MAAI,CAACmH,OAAL,CAAauE,IAAb,CAAkB5wB,SAAS,CAACkuB,WAA5B,EAAyCluB,SAAS,CAACkG,YAAnD,EAAiEuZ,MAAM,CAACiN,GAAP,CAAW+D,QAAX,CAAoBC,MAArF,EAFmB;EAKnB;;;EACA,YAAA,MAAI,CAACrE,OAAL,CAAanpB,KAAb;EACH;;EAED,UAAA,MAAI,CAACgiB,WAAL,GAAmB,IAAnB;EACH,SAXD,CAWE,OAAO2L,OAAP,EAAgB;EACd;EACA;EACA,UAAA,MAAI,CAAChD,SAAL,CAAegD,OAAf;EACH;EACJ,OArBL,EAsBK5hB,KAtBL,CAsBW,YAAM,EAtBjB;EAuBH;EAED;;;;;;sCAGgB;EACZ;EACA,WAAKlP,QAAL,CAAcC,SAAd,CAAwB+F,KAAxB,CAA8B+qB,MAA9B,GAAuC,EAAvC,CAFY;;EAKZ,WAAK5R,OAAL,GAAe,KAAf,CALY;;EAQZ,UAAI,KAAKhW,MAAL,CAAYE,WAAZ,GAA0B,KAAKF,MAAL,CAAYmI,QAA1C,EAAoD;EAChD,aAAKnI,MAAL,CAAYO,IAAZ;EACH;EACJ;EAED;;;;;;qCAGe;EACX;EACA,WAAK1J,QAAL,CAAcC,SAAd,CAAwB+F,KAAxB,CAA8B+qB,MAA9B,GAAuC,CAAvC,CAFW;;EAKX,WAAK5R,OAAL,GAAe,IAAf,CALW;;EAQX,WAAKhW,MAAL,CAAYqH,KAAZ;EACH;EAED;;;;;;;;;+BAMS;EACL;EACA,UAAI,KAAK2U,WAAT,EAAsB;EAClB,aAAK2K,aAAL;EACH,OAJI;;;EAOL,WAAKlD,OAAL,CAAa,OAAb,EAPK;;EAUL,WAAK8C,OAAL;EACH;EAED;;;;;;gCAGU;EAAA;;EACN;EACA,WAAKtK,cAAL,CACKllB,IADL,CACU,YAAM;EACR;EACA,YAAI,OAAI,CAACosB,OAAT,EAAkB;EACd,UAAA,OAAI,CAACA,OAAL,CAAa0E,OAAb;EACH,SAJO;;;EAOR,QAAA,OAAI,CAAC5L,cAAL,GAAsB,IAAIvlB,OAAJ,CAAY,UAAAC,OAAO,EAAI;EACzC,UAAA,OAAI,CAAClB,EAAL,CAAQ,QAAR,EAAkBkB,OAAlB;;EACA,UAAA,OAAI,CAACqJ,MAAL,CAAYY,KAAZ,CAAkBC,GAAlB,CAAsB,OAAI,CAACsiB,OAA3B;EACH,SAHqB,CAAtB,CAPQ;;EAaR,QAAA,OAAI,CAACgB,UAAL;EACH,OAfL,EAgBKpe,KAhBL,CAgBW,YAAM,EAhBjB;EAiBH;EAED;;;;;;;8BAIQ/R,OAAgB;EAAA;;EAAA,wCAAN8B,IAAM;EAANA,QAAAA,IAAM;EAAA;;EACpB,UAAMgyB,QAAQ,GAAG,KAAK3yB,MAAL,CAAYnB,KAAZ,CAAjB;;EAEA,UAAIkB,EAAE,CAACvB,KAAH,CAASm0B,QAAT,CAAJ,EAAwB;EACpBA,QAAAA,QAAQ,CAACzyB,OAAT,CAAiB,UAAA8jB,OAAO,EAAI;EACxB,cAAIjkB,EAAE,CAACxB,QAAH,CAAYylB,OAAZ,CAAJ,EAA0B;EACtBA,YAAAA,OAAO,CAACpjB,KAAR,CAAc,OAAd,EAAoBD,IAApB;EACH;EACJ,SAJD;EAKH;EACJ;EAED;;;;;;;;;4BAMG9B,OAAOc,UAAU;EAChB,UAAI,CAACI,EAAE,CAACvB,KAAH,CAAS,KAAKwB,MAAL,CAAYnB,KAAZ,CAAT,CAAL,EAAmC;EAC/B,aAAKmB,MAAL,CAAYnB,KAAZ,IAAqB,EAArB;EACH;;EAED,WAAKmB,MAAL,CAAYnB,KAAZ,EAAmBwB,IAAnB,CAAwBV,QAAxB;EAEA,aAAO,IAAP;EACH;EAED;;;;;;;;;;;uCAQiBuR,MAAMlP,MAAM;EAAA;;EACzB,WAAK6I,MAAL,CAAYY,KAAZ,CAAkBC,GAAlB,sCAAoD1J,IAApD;EAEA,WAAKmsB,WAAL,GAAmB1sB,UAAU,CAAC,YAAM;EAChC,QAAA,OAAI,CAACqwB,MAAL;;EACA,QAAA,OAAI,CAACtD,gBAAL,CAAsB,oBAAtB;EACH,OAH4B,EAG1Btd,IAH0B,CAA7B;EAIH;EAED;;;;;;;uCAIiBlP,MAAM;EACnB,UAAI,CAACjC,EAAE,CAAC5B,eAAH,CAAmB,KAAKgwB,WAAxB,CAAL,EAA2C;EACvC,aAAKtjB,MAAL,CAAYY,KAAZ,CAAkBC,GAAlB,sCAAoD1J,IAApD;EAEAgjB,QAAAA,YAAY,CAAC,KAAKmJ,WAAN,CAAZ;EACA,aAAKA,WAAL,GAAmB,IAAnB;EACH;EACJ;;;0BAliBa;EACV,aACI,KAAKtjB,MAAL,CAAYhB,OAAZ,IAAuB,KAAKgB,MAAL,CAAY2R,OAAnC,IAA8C,KAAK3R,MAAL,CAAY3D,MAAZ,CAAmB0Z,GAAnB,CAAuBhS,OAArE,IAAgF,CAAC7O,EAAE,CAACb,KAAH,CAAS,KAAKmiB,WAAd,CADrF;EAGH;;;0BA4CY;EACT,UAAMhF,MAAM,GAAG;EACXuW,QAAAA,cAAc,EAAE,0BADL;EAEXC,QAAAA,YAAY,EAAE,0BAFH;EAGXC,QAAAA,MAAM,EAAE11B,MAAM,CAACuU,QAAP,CAAgB1T,QAHb;EAIX80B,QAAAA,EAAE,EAAE3N,IAAI,CAACC,GAAL,EAJO;EAKX2N,QAAAA,QAAQ,EAAE,GALC;EAMXC,QAAAA,SAAS,EAAE,GANA;EAOXC,QAAAA,QAAQ,EAAE,KAAK7R;EAPJ,OAAf;EAUA,UAAM8R,IAAI,GAAG,4CAAb;EAEA,uBAAUA,IAAV,cAAkB/W,cAAc,CAACC,MAAD,CAAhC;EACH;;;;;;ECnGL,IAAM5R,MAAM,GAAG;EACX;EACA2oB,EAAAA,cAFW,0BAEIjzB,IAFJ,EAEUyC,UAFV,EAEsB;EAAA;;EAC7B,QAAI7C,EAAE,CAAChC,MAAH,CAAU6E,UAAV,CAAJ,EAA2B;EACvBY,MAAAA,aAAa,CAACrD,IAAD,EAAO,KAAK2J,KAAZ,EAAmB;EAC5BqB,QAAAA,GAAG,EAAEvI;EADuB,OAAnB,CAAb;EAGH,KAJD,MAIO,IAAI7C,EAAE,CAACvB,KAAH,CAASoE,UAAT,CAAJ,EAA0B;EAC7BA,MAAAA,UAAU,CAAC1C,OAAX,CAAmB,UAAA0nB,SAAS,EAAI;EAC5BpkB,QAAAA,aAAa,CAACrD,IAAD,EAAO,KAAI,CAAC2J,KAAZ,EAAmB8d,SAAnB,CAAb;EACH,OAFD;EAGH;EACJ,GAZU;EAcX;EACA;EACAyL,EAAAA,MAhBW,kBAgBJ/3B,KAhBI,EAgBG;EAAA;;EACV,QAAI,CAACiR,OAAO,CAACjR,KAAD,EAAQ,gBAAR,CAAZ,EAAuC;EACnC,WAAKmQ,KAAL,CAAW2H,IAAX,CAAgB,uBAAhB;EACA;EACH,KAJS;;;EAOV9I,IAAAA,KAAK,CAACiB,cAAN,CAAqBhL,IAArB,CAA0B,IAA1B,EAPU;;EAUV,SAAKmyB,OAAL,CAAanyB,IAAb,CACI,IADJ,EAEI,YAAM;EACF;EACA,MAAA,MAAI,CAAClB,OAAL,CAAaiM,OAAb,GAAuB,EAAvB,CAFE;;EAKF7H,MAAAA,aAAa,CAAC,MAAI,CAACqG,KAAN,CAAb;EACA,MAAA,MAAI,CAACA,KAAL,GAAa,IAAb,CANE;;EASF,UAAI/J,EAAE,CAACpB,OAAH,CAAW,MAAI,CAAC+C,QAAL,CAAcC,SAAzB,CAAJ,EAAyC;EACrC,QAAA,MAAI,CAACD,QAAL,CAAcC,SAAd,CAAwByD,eAAxB,CAAwC,OAAxC;EACH,OAXC;;;EAAA,UAcMoF,OAdN,GAcwBlP,KAdxB,CAcMkP,OAdN;EAAA,UAcerK,IAdf,GAcwB7E,KAdxB,CAce6E,IAdf;;EAAA,oCAe4CqK,OAf5C;EAAA;EAAA,yCAeO1B,QAfP;EAAA,UAeOA,QAfP,mCAekByY,SAAS,CAACjX,KAf5B;EAAA,UAemCa,GAfnC,aAemCA,GAfnC;;EAgBF,UAAMmoB,OAAO,GAAGxqB,QAAQ,KAAK,OAAb,GAAuB3I,IAAvB,GAA8B,KAA9C;EACA,UAAMyC,UAAU,GAAGkG,QAAQ,KAAK,OAAb,GAAuB,EAAvB,GAA4B;EAAEqC,QAAAA,GAAG,EAAHA;EAAF,OAA/C;EAEAvP,MAAAA,MAAM,CAACqF,MAAP,CAAc,MAAd,EAAoB;EAChB6H,QAAAA,QAAQ,EAARA,QADgB;EAEhB3I,QAAAA,IAAI,EAAJA,IAFgB;EAGhB;EACAf,QAAAA,SAAS,EAAEsJ,OAAO,CAACG,KAAR,CAAc1I,IAAd,EAAoB2I,QAApB,EAA8B,MAAI,CAAC5B,MAAL,CAAY6B,WAA1C,CAJK;EAKhB;EACAe,QAAAA,KAAK,EAAE5G,aAAa,CAACowB,OAAD,EAAU1wB,UAAV;EANJ,OAApB,EAnBE;;EA6BF,MAAA,MAAI,CAAClB,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoC,MAAI,CAACqH,KAAzC,EA7BE;;;EAgCF,UAAI/J,EAAE,CAACzB,OAAH,CAAWhD,KAAK,CAACkjB,QAAjB,CAAJ,EAAgC;EAC5B,QAAA,MAAI,CAACtX,MAAL,CAAYsX,QAAZ,GAAuBljB,KAAK,CAACkjB,QAA7B;EACH,OAlCC;;;EAqCF,UAAI,MAAI,CAAC3U,OAAT,EAAkB;EACd,YAAI,MAAI,CAAC3C,MAAL,CAAYqsB,WAAhB,EAA6B;EACzB,UAAA,MAAI,CAACzpB,KAAL,CAAW7G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;EACH;;EACD,YAAI,MAAI,CAACiE,MAAL,CAAYsX,QAAhB,EAA0B;EACtB,UAAA,MAAI,CAAC1U,KAAL,CAAW7G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;EACH;;EACD,YAAI,CAAClD,EAAE,CAACb,KAAH,CAAS5D,KAAK,CAAColB,MAAf,CAAL,EAA6B;EACzB,UAAA,MAAI,CAACA,MAAL,GAAcplB,KAAK,CAAColB,MAApB;EACH;;EACD,YAAI,MAAI,CAACxZ,MAAL,CAAY8X,IAAZ,CAAiBhC,MAArB,EAA6B;EACzB,UAAA,MAAI,CAAClT,KAAL,CAAW7G,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;EACH;;EACD,YAAI,MAAI,CAACiE,MAAL,CAAYgQ,KAAhB,EAAuB;EACnB,UAAA,MAAI,CAACpN,KAAL,CAAW7G,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;EACH;;EACD,YAAI,MAAI,CAACiE,MAAL,CAAY6B,WAAhB,EAA6B;EACzB,UAAA,MAAI,CAACe,KAAL,CAAW7G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;EACH;EACJ,OAxDC;;;EA2DFiG,MAAAA,EAAE,CAACkb,YAAH,CAAgB7jB,IAAhB,CAAqB,MAArB,EA3DE;;EA8DF,UAAI,MAAI,CAACsJ,OAAT,EAAkB;EACdY,QAAAA,MAAM,CAAC2oB,cAAP,CAAsB7yB,IAAtB,CAA2B,MAA3B,EAAiC,QAAjC,EAA2CiK,OAA3C;EACH,OAhEC;;;EAmEF,MAAA,MAAI,CAACtD,MAAL,CAAYwH,KAAZ,GAAoBpT,KAAK,CAACoT,KAA1B,CAnEE;;EAsEF5E,MAAAA,KAAK,CAACyS,KAAN,CAAYhc,IAAZ,CAAiB,MAAjB,EAtEE;;EAyEF,UAAI,MAAI,CAACsJ,OAAT,EAAkB;EACd;EACA,YAAIjO,MAAM,CAACgC,IAAP,CAAYtC,KAAZ,EAAmByK,QAAnB,CAA4B,QAA5B,CAAJ,EAA2C;EACvC0E,UAAAA,MAAM,CAAC2oB,cAAP,CAAsB7yB,IAAtB,CAA2B,MAA3B,EAAiC,OAAjC,EAA0CjF,KAAK,CAACme,MAAhD;EACH;EACJ,OA9EC;;;EAiFF,UAAI,MAAI,CAAC5P,OAAL,IAAiB,MAAI,CAAC6R,OAAL,IAAgB,CAAC,MAAI,CAACtc,SAAL,CAAe8J,EAArD,EAA0D;EACtD;EACAA,QAAAA,EAAE,CAACmb,KAAH,CAAS9jB,IAAT,CAAc,MAAd;EACH;;EAED,UAAI,MAAI,CAACsJ,OAAT,EAAkB;EACd;EACA,QAAA,MAAI,CAACC,KAAL,CAAWuB,IAAX;EACH,OAzFC;;;EA4FF,MAAA,MAAI,CAACoH,UAAL,CAAgBrC,MAAhB;EACH,KA/FL,EAgGI,IAhGJ;EAkGH;EA5HU,CAAf;;ECiBA;EACA;EAEA;;MACMojB;;;EACF,gBAAYjwB,MAAZ,EAAoBlE,OAApB,EAA6B;EAAA;;EAAA;;EACzB,SAAK4lB,MAAL,GAAc,EAAd,CADyB;;EAIzB,SAAK3jB,KAAL,GAAa,KAAb;EACA,SAAKyf,OAAL,GAAe,KAAf;EACA,SAAK0S,MAAL,GAAc,KAAd,CANyB;;EASzB,SAAKvpB,KAAL,GAAaxB,OAAO,CAACwB,KAArB,CATyB;;EAYzB,SAAKJ,KAAL,GAAavG,MAAb,CAZyB;;EAezB,QAAIxD,EAAE,CAAChC,MAAH,CAAU,KAAK+L,KAAf,CAAJ,EAA2B;EACvB,WAAKA,KAAL,GAAa1G,QAAQ,CAAC0C,gBAAT,CAA0B,KAAKgE,KAA/B,CAAb;EACH,KAjBwB;;;EAoBzB,QAAK1M,MAAM,CAACs2B,MAAP,IAAiB,KAAK5pB,KAAL,YAAsB4pB,MAAxC,IAAmD3zB,EAAE,CAACrB,QAAH,CAAY,KAAKoL,KAAjB,CAAnD,IAA8E/J,EAAE,CAACvB,KAAH,CAAS,KAAKsL,KAAd,CAAlF,EAAwG;EACpG;EACA,WAAKA,KAAL,GAAa,KAAKA,KAAL,CAAW,CAAX,CAAb;EACH,KAvBwB;;;EA0BzB,SAAK5C,MAAL,GAAc0D,MAAM,CAChB,EADgB,EAEhB2T,QAFgB,EAGhBiV,IAAI,CAACjV,QAHW,EAIhBlf,OAAO,IAAI,EAJK,EAKf,YAAM;EACH,UAAI;EACA,eAAO+M,IAAI,CAACC,KAAL,CAAW,KAAI,CAACvC,KAAL,CAAWY,YAAX,CAAwB,kBAAxB,CAAX,CAAP;EACH,OAFD,CAEE,OAAOxM,CAAP,EAAU;EACR,eAAO,EAAP;EACH;EACJ,KAND,EALgB,CAApB,CA1ByB;;EAyCzB,SAAKwD,QAAL,GAAgB;EACZC,MAAAA,SAAS,EAAE,IADC;EAEZ6Q,MAAAA,QAAQ,EAAE,IAFE;EAGZP,MAAAA,OAAO,EAAE,EAHG;EAIZa,MAAAA,OAAO,EAAE,EAJG;EAKZJ,MAAAA,QAAQ,EAAE,EALE;EAMZC,MAAAA,MAAM,EAAE,EANI;EAOZJ,MAAAA,QAAQ,EAAE;EACN2H,QAAAA,KAAK,EAAE,IADD;EAEN9F,QAAAA,IAAI,EAAE,IAFA;EAGN0E,QAAAA,MAAM,EAAE,EAHF;EAIN7G,QAAAA,OAAO,EAAE;EAJH;EAPE,KAAhB,CAzCyB;;EAyDzB,SAAKO,QAAL,GAAgB;EACZwK,MAAAA,MAAM,EAAE,IADI;EAEZrG,MAAAA,YAAY,EAAE,CAAC,CAFH;EAGZuG,MAAAA,IAAI,EAAE,IAAI1gB,OAAJ;EAHM,KAAhB,CAzDyB;;EAgEzB,SAAKiW,UAAL,GAAkB;EACduK,MAAAA,MAAM,EAAE;EADM,KAAlB,CAhEyB;;EAqEzB,SAAK3d,OAAL,GAAe;EACXuX,MAAAA,KAAK,EAAE,EADI;EAEXtL,MAAAA,OAAO,EAAE;EAFE,KAAf,CArEyB;EA2EzB;;EACA,SAAKG,KAAL,GAAa,IAAIkW,OAAJ,CAAY,KAAKza,MAAL,CAAYuE,KAAxB,CAAb,CA5EyB;;EA+EzB,SAAKA,KAAL,CAAWC,GAAX,CAAe,QAAf,EAAyB,KAAKxE,MAA9B;EACA,SAAKuE,KAAL,CAAWC,GAAX,CAAe,SAAf,EAA0BhD,OAA1B,EAhFyB;;EAmFzB,QAAI3I,EAAE,CAAC5B,eAAH,CAAmB,KAAK2L,KAAxB,KAAkC,CAAC/J,EAAE,CAACpB,OAAH,CAAW,KAAKmL,KAAhB,CAAvC,EAA+D;EAC3D,WAAK2B,KAAL,CAAW0H,KAAX,CAAiB,0CAAjB;EACA;EACH,KAtFwB;;;EAyFzB,QAAI,KAAKrJ,KAAL,CAAW5I,IAAf,EAAqB;EACjB,WAAKuK,KAAL,CAAW2H,IAAX,CAAgB,sBAAhB;EACA;EACH,KA5FwB;;;EA+FzB,QAAI,CAAC,KAAKlM,MAAL,CAAY0H,OAAjB,EAA0B;EACtB,WAAKnD,KAAL,CAAW0H,KAAX,CAAiB,kCAAjB;EACA;EACH,KAlGwB;EAqGzB;;;EACA,QAAI,CAACzK,OAAO,CAACG,KAAR,GAAgBI,GAArB,EAA0B;EACtB,WAAKwC,KAAL,CAAW0H,KAAX,CAAiB,0BAAjB;EACA;EACH,KAzGwB;;;EA4GzB,QAAMsH,KAAK,GAAG,KAAK3Q,KAAL,CAAW1H,SAAX,CAAqB,IAArB,CAAd;EACAqY,IAAAA,KAAK,CAAC+D,QAAN,GAAiB,KAAjB;EACA,SAAK9c,QAAL,CAAciyB,QAAd,GAAyBlZ,KAAzB,CA9GyB;EAiHzB;;EACA,QAAMta,IAAI,GAAG,KAAK2J,KAAL,CAAWwpB,OAAX,CAAmB3lB,WAAnB,EAAb,CAlHyB;;EAqHzB,QAAI2S,MAAM,GAAG,IAAb;EACA,QAAIrhB,GAAG,GAAG,IAAV,CAtHyB;;EAyHzB,YAAQkB,IAAR;EACI,WAAK,KAAL;EACI;EACAmgB,QAAAA,MAAM,GAAG,KAAKxW,KAAL,CAAW3D,aAAX,CAAyB,QAAzB,CAAT,CAFJ;;EAKI,YAAIpG,EAAE,CAACpB,OAAH,CAAW2hB,MAAX,CAAJ,EAAwB;EACpB;EACArhB,UAAAA,GAAG,GAAGgd,QAAQ,CAACqE,MAAM,CAAC5V,YAAP,CAAoB,KAApB,CAAD,CAAd;EACA,eAAK5B,QAAL,GAAgB2Y,gBAAgB,CAACxiB,GAAG,CAAC+N,QAAJ,EAAD,CAAhC,CAHoB;;EAMpB,eAAKtL,QAAL,CAAcC,SAAd,GAA0B,KAAKmI,KAA/B;EACA,eAAKA,KAAL,GAAawW,MAAb,CAPoB;;EAUpB,eAAK5e,QAAL,CAAcC,SAAd,CAAwB8C,SAAxB,GAAoC,EAApC,CAVoB;;EAapB,cAAIxF,GAAG,CAAC20B,MAAJ,CAAWj2B,MAAf,EAAuB;EACnB,gBAAMk2B,MAAM,GAAG,CAAC,GAAD,EAAM,MAAN,CAAf;;EAEA,gBAAIA,MAAM,CAAC9tB,QAAP,CAAgB9G,GAAG,CAAC60B,YAAJ,CAAiBv0B,GAAjB,CAAqB,UAArB,CAAhB,CAAJ,EAAuD;EACnD,mBAAK2H,MAAL,CAAYsX,QAAZ,GAAuB,IAAvB;EACH;;EACD,gBAAIqV,MAAM,CAAC9tB,QAAP,CAAgB9G,GAAG,CAAC60B,YAAJ,CAAiBv0B,GAAjB,CAAqB,MAArB,CAAhB,CAAJ,EAAmD;EAC/C,mBAAK2H,MAAL,CAAY8X,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;EACH,aARkB;EAWnB;;;EACA,gBAAI,KAAKP,SAAT,EAAoB;EAChB,mBAAKvV,MAAL,CAAY6B,WAAZ,GAA0B8qB,MAAM,CAAC9tB,QAAP,CAAgB9G,GAAG,CAAC60B,YAAJ,CAAiBv0B,GAAjB,CAAqB,aAArB,CAAhB,CAA1B;EACA,mBAAK2H,MAAL,CAAYglB,EAAZ,GAAiBjtB,GAAG,CAAC60B,YAAJ,CAAiBv0B,GAAjB,CAAqB,IAArB,CAAjB,CAFgB;EAGnB,aAHD,MAGO;EACH,mBAAK2H,MAAL,CAAY6B,WAAZ,GAA0B,IAA1B;EACH;EACJ;EACJ,SAhCD,MAgCO;EACH;EACA,eAAKD,QAAL,GAAgB,KAAKgB,KAAL,CAAWY,YAAX,CAAwB,KAAKxD,MAAL,CAAYtE,UAAZ,CAAuB8a,KAAvB,CAA6B5U,QAArD,CAAhB,CAFG;;EAKH,eAAKgB,KAAL,CAAW1E,eAAX,CAA2B,KAAK8B,MAAL,CAAYtE,UAAZ,CAAuB8a,KAAvB,CAA6B5U,QAAxD;EACH,SA3CL;;;EA8CI,YAAI/I,EAAE,CAACb,KAAH,CAAS,KAAK4J,QAAd,KAA2B,CAAClN,MAAM,CAACgC,IAAP,CAAY2jB,SAAZ,EAAuBxb,QAAvB,CAAgC,KAAK+C,QAArC,CAAhC,EAAgF;EAC5E,eAAK2C,KAAL,CAAW0H,KAAX,CAAiB,gCAAjB;EACA;EACH,SAjDL;;;EAoDI,aAAKhT,IAAL,GAAYqhB,KAAK,CAAC5Y,KAAlB;EAEA;;EAEJ,WAAK,OAAL;EACA,WAAK,OAAL;EACI,aAAKzI,IAAL,GAAYA,IAAZ;EACA,aAAK2I,QAAL,GAAgByY,SAAS,CAACjX,KAA1B,CAFJ;;EAKI,YAAI,KAAKR,KAAL,CAAW+d,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;EACxC,eAAK3gB,MAAL,CAAYqsB,WAAZ,GAA0B,IAA1B;EACH;;EACD,YAAI,KAAKzpB,KAAL,CAAW+d,YAAX,CAAwB,UAAxB,CAAJ,EAAyC;EACrC,eAAK3gB,MAAL,CAAYsX,QAAZ,GAAuB,IAAvB;EACH;;EACD,YAAI,KAAK1U,KAAL,CAAW+d,YAAX,CAAwB,aAAxB,KAA0C,KAAK/d,KAAL,CAAW+d,YAAX,CAAwB,oBAAxB,CAA9C,EAA6F;EACzF,eAAK3gB,MAAL,CAAY6B,WAAZ,GAA0B,IAA1B;EACH;;EACD,YAAI,KAAKe,KAAL,CAAW+d,YAAX,CAAwB,OAAxB,CAAJ,EAAsC;EAClC,eAAK3gB,MAAL,CAAYgQ,KAAZ,GAAoB,IAApB;EACH;;EACD,YAAI,KAAKpN,KAAL,CAAW+d,YAAX,CAAwB,MAAxB,CAAJ,EAAqC;EACjC,eAAK3gB,MAAL,CAAY8X,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;EACH;;EAED;;EAEJ;EACI,aAAKvR,KAAL,CAAW0H,KAAX,CAAiB,gCAAjB;EACA;EAnFR,KAzHyB;;;EAgNzB,SAAK/T,SAAL,GAAiBsJ,OAAO,CAACG,KAAR,CAAc,KAAK1I,IAAnB,EAAyB,KAAK2I,QAA9B,EAAwC,KAAK5B,MAAL,CAAY6B,WAApD,CAAjB,CAhNyB;;EAmNzB,QAAI,CAAC,KAAK3J,SAAL,CAAe6J,GAApB,EAAyB;EACrB,WAAKwC,KAAL,CAAW0H,KAAX,CAAiB,0BAAjB;EACA;EACH;;EAED,SAAK/S,cAAL,GAAsB,EAAtB,CAxNyB;;EA2NzB,SAAKqW,SAAL,GAAiB,IAAI6O,SAAJ,CAAc,IAAd,CAAjB,CA3NyB;;EA8NzB,SAAKzW,OAAL,GAAe,IAAIF,OAAJ,CAAY,IAAZ,CAAf,CA9NyB;;EAiOzB,SAAK7E,KAAL,CAAW5I,IAAX,GAAkB,IAAlB,CAjOyB;;EAoOzB,QAAI,CAACnB,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcC,SAAzB,CAAL,EAA0C;EACtC,WAAKD,QAAL,CAAcC,SAAd,GAA0BuB,aAAa,CAAC,KAAD,CAAvC;EACArB,MAAAA,IAAI,CAAC,KAAKiI,KAAN,EAAa,KAAKpI,QAAL,CAAcC,SAA3B,CAAJ;EACH,KAvOwB;;;EA0OzBuH,IAAAA,EAAE,CAACkb,YAAH,CAAgB7jB,IAAhB,CAAqB,IAArB,EA1OyB;;EA6OzBuJ,IAAAA,KAAK,CAACyS,KAAN,CAAYhc,IAAZ,CAAiB,IAAjB,EA7OyB;;EAgPzB,QAAI,KAAK2G,MAAL,CAAYuE,KAAhB,EAAuB;EACnBnL,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC,KAAKuF,MAAL,CAAYlH,MAAZ,CAAmBiU,IAAnB,CAAwB,GAAxB,CAAvC,EAAqE,UAAApV,KAAK,EAAI;EAC1E,QAAA,KAAI,CAAC4M,KAAL,CAAWC,GAAX,kBAAyB7M,KAAK,CAACsB,IAA/B;EACH,OAFD;EAGH,KApPwB;EAuPzB;;;EACA,QAAI,KAAK0J,OAAL,IAAiB,KAAK6R,OAAL,IAAgB,CAAC,KAAKtc,SAAL,CAAe8J,EAArD,EAA0D;EACtDA,MAAAA,EAAE,CAACmb,KAAH,CAAS9jB,IAAT,CAAc,IAAd;EACH,KA1PwB;;;EA6PzB,SAAKkW,SAAL,CAAe9U,SAAf,GA7PyB;;EAgQzB,SAAK8U,SAAL,CAAe0I,MAAf,GAhQyB;;EAmQzB,SAAK1M,UAAL,GAAkB,IAAImQ,UAAJ,CAAe,IAAf,CAAlB,CAnQyB;;EAsQzB,QAAI,KAAK1b,MAAL,CAAY0Z,GAAZ,CAAgBhS,OAApB,EAA6B;EACzB,WAAKgS,GAAL,GAAW,IAAIkN,GAAJ,CAAQ,IAAR,CAAX;EACH,KAxQwB;;;EA2QzB,QAAI,KAAK5mB,MAAL,CAAYsX,QAAhB,EAA0B;EACtB,WAAKpT,IAAL;EACH,KA7QwB;;;EAgRzB,SAAK+Z,YAAL,GAAoB,CAApB;EACH;EAGD;EACA;;EAEA;;;;;;;;EA2BA;;;6BAGO;EACH,UAAI,CAACplB,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWsB,IAAvB,CAAL,EAAmC;EAC/B,eAAO,IAAP;EACH,OAHE;;;EAMH,aAAO,KAAKtB,KAAL,CAAWsB,IAAX,EAAP;EACH;EAED;;;;;;8BAGQ;EACJ,UAAI,CAAC,KAAKyV,OAAN,IAAiB,CAAC9gB,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWoI,KAAvB,CAAtB,EAAqD;EACjD;EACH;;EAED,WAAKpI,KAAL,CAAWoI,KAAX;EACH;EAED;;;;;;;EA4BA;;;;iCAIW5W,OAAO;EACd;EACA,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,CAAC,KAAKulB,OAAjD;;EAEA,UAAIjhB,MAAJ,EAAY;EACR,aAAKwL,IAAL;EACH,OAFD,MAEO;EACH,aAAK8G,KAAL;EACH;EACJ;EAED;;;;;;6BAGO;EACH,UAAI,KAAKrI,OAAT,EAAkB;EACd,aAAKqI,KAAL;EACA,aAAKC,OAAL;EACH,OAHD,MAGO,IAAIpS,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWkgB,IAAvB,CAAJ,EAAkC;EACrC,aAAKlgB,KAAL,CAAWkgB,IAAX;EACH;EACJ;EAED;;;;;;gCAGU;EACN,WAAKjf,WAAL,GAAmB,CAAnB;EACH;EAED;;;;;;;6BAIO0D,UAAU;EACb,WAAK1D,WAAL,GAAmB,KAAKA,WAAL,IAAoBhL,EAAE,CAAC1B,MAAH,CAAUoQ,QAAV,IAAsBA,QAAtB,GAAiC,KAAKvH,MAAL,CAAYuH,QAAjE,CAAnB;EACH;EAED;;;;;;;8BAIQA,UAAU;EACd,WAAK1D,WAAL,GAAmB,KAAKA,WAAL,IAAoBhL,EAAE,CAAC1B,MAAH,CAAUoQ,QAAV,IAAsBA,QAAtB,GAAiC,KAAKvH,MAAL,CAAYuH,QAAjE,CAAnB;EACH;EAED;;;;;;;;EAyHA;;;;qCAIesG,MAAM;EACjB,UAAMlC,MAAM,GAAG,KAAK/I,KAAL,CAAWoN,KAAX,GAAmB,CAAnB,GAAuB,KAAKrE,MAA3C;EACA,WAAKA,MAAL,GAAcA,MAAM,IAAI9S,EAAE,CAAC1B,MAAH,CAAU0W,IAAV,IAAkBA,IAAlB,GAAyB,CAA7B,CAApB;EACH;EAED;;;;;;;qCAIeA,MAAM;EACjB,WAAKqR,cAAL,CAAoB,CAACrR,IAArB;EACH;EAED;;;;;;;;EAiRA;;;;qCAIezZ,OAAO;EAClBkX,MAAAA,QAAQ,CAAC5S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2BjF,KAA3B,EAAkC,KAAlC;EACH;EAED;;;;;;;;EA+EA;;;;gCAIU;EACN;EACA,UAAIoN,OAAO,CAACc,OAAZ,EAAqB;EACjB,aAAKM,KAAL,CAAWiqB,8BAAX;EACH;EACJ;EAED;;;;;;;qCAIen0B,QAAQ;EACnB;EACA,UAAI,KAAKR,SAAL,CAAe8J,EAAf,IAAqB,CAAC,KAAK6d,OAA/B,EAAwC;EACpC;EACA,YAAMiN,QAAQ,GAAGruB,QAAQ,CAAC,KAAKjE,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB0X,YAAjD,CAAzB,CAFoC;;EAKpC,YAAMvZ,KAAK,GAAG,OAAO1F,MAAP,KAAkB,WAAlB,GAAgC+H,SAAhC,GAA4C,CAAC/H,MAA3D,CALoC;;EAQpC,YAAMq0B,MAAM,GAAG5uB,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKuF,MAAL,CAAYC,UAAZ,CAAuB0X,YAAjD,EAA+DvZ,KAA/D,CAA1B,CARoC;;EAWpC,YAAI2uB,MAAM,IAAI,KAAK/sB,MAAL,CAAYsK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAV,IAAuD,CAAChG,EAAE,CAACb,KAAH,CAAS,KAAKgI,MAAL,CAAYqL,QAArB,CAA5D,EAA4F;EACxFf,UAAAA,QAAQ,CAAC4I,UAAT,CAAoB7Z,IAApB,CAAyB,IAAzB,EAA+B,KAA/B;EACH,SAbmC;;;EAgBpC,YAAI0zB,MAAM,KAAKD,QAAf,EAAyB;EACrB,cAAME,SAAS,GAAGD,MAAM,GAAG,gBAAH,GAAsB,eAA9C;EACApzB,UAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCoqB,SAApC;EACH;;EAED,eAAO,CAACD,MAAR;EACH;;EAED,aAAO,KAAP;EACH;EAED;;;;;;;;4BAKGp1B,OAAOc,UAAU;EAChBW,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC9C,KAAvC,EAA8Cc,QAA9C;EACH;EAED;;;;;;;;8BAKKd,OAAOc,UAAU;EAClBc,MAAAA,IAAI,CAACF,IAAL,CAAU,IAAV,EAAgB,KAAKmB,QAAL,CAAcC,SAA9B,EAAyC9C,KAAzC,EAAgDc,QAAhD;EACH;EAED;;;;;;;;6BAKId,OAAOc,UAAU;EACjBa,MAAAA,GAAG,CAAC,KAAKkB,QAAL,CAAcC,SAAf,EAA0B9C,KAA1B,EAAiCc,QAAjC,CAAH;EACH;EAED;;;;;;;;;;8BAOQA,UAAwB;EAAA;;EAAA,UAAdw0B,IAAc,uEAAP,KAAO;;EAC5B,UAAI,CAAC,KAAK7yB,KAAV,EAAiB;EACb;EACH;;EAED,UAAMwmB,IAAI,GAAG,SAAPA,IAAO,GAAM;EACf;EACA1kB,QAAAA,QAAQ,CAACkN,IAAT,CAAc5I,KAAd,CAAoB2a,QAApB,GAA+B,EAA/B,CAFe;;EAKf,QAAA,MAAI,CAAC3E,KAAL,GAAa,IAAb,CALe;;EAQf,YAAIyW,IAAJ,EAAU;EACN,cAAIv4B,MAAM,CAACgC,IAAP,CAAY,MAAI,CAAC8D,QAAjB,EAA2B/D,MAA/B,EAAuC;EACnC;EACA8F,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAcuQ,OAAd,CAAsB7G,IAAvB,CAAb;EACA3H,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAc8Q,QAAf,CAAb;EACA/O,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAc8P,QAAf,CAAb;EACA/N,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAcI,OAAf,CAAb,CALmC;;EAQnC,YAAA,MAAI,CAACJ,QAAL,CAAcuQ,OAAd,CAAsB7G,IAAtB,GAA6B,IAA7B;EACA,YAAA,MAAI,CAAC1J,QAAL,CAAc8Q,QAAd,GAAyB,IAAzB;EACA,YAAA,MAAI,CAAC9Q,QAAL,CAAc8P,QAAd,GAAyB,IAAzB;EACA,YAAA,MAAI,CAAC9P,QAAL,CAAcI,OAAd,GAAwB,IAAxB;EACH,WAbK;;;EAgBN,cAAI/B,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAJ,EAA2B;EACvBA,YAAAA,QAAQ;EACX;EACJ,SAnBD,MAmBO;EACH;EACAyB,UAAAA,eAAe,CAACb,IAAhB,CAAqB,MAArB,EAFG;;EAKHuD,UAAAA,cAAc,CAAC,MAAI,CAACpC,QAAL,CAAciyB,QAAf,EAAyB,MAAI,CAACjyB,QAAL,CAAcC,SAAvC,CAAd,CALG;;EAQHd,UAAAA,YAAY,CAACN,IAAb,CAAkB,MAAlB,EAAwB,MAAI,CAACmB,QAAL,CAAciyB,QAAtC,EAAgD,WAAhD,EAA6D,IAA7D,EARG;;EAWH,cAAI5zB,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAJ,EAA2B;EACvBA,YAAAA,QAAQ,CAACY,IAAT,CAAc,MAAI,CAACmB,QAAL,CAAciyB,QAA5B;EACH,WAbE;;;EAgBH,UAAA,MAAI,CAACryB,KAAL,GAAa,KAAb,CAhBG;;EAmBHG,UAAAA,UAAU,CAAC,YAAM;EACb,YAAA,MAAI,CAACC,QAAL,GAAgB,IAAhB;EACA,YAAA,MAAI,CAACoI,KAAL,GAAa,IAAb;EACH,WAHS,EAGP,GAHO,CAAV;EAIH;EACJ,OAnDD,CAL4B;;;EA2D5B,WAAKkgB,IAAL,GA3D4B;;EA8D5B,UAAI,KAAKngB,OAAT,EAAkB;EACd;EACAmb,QAAAA,YAAY,CAAC,KAAKC,MAAL,CAAYlE,OAAb,CAAZ,CAFc;;EAKd7X,QAAAA,EAAE,CAACmK,oBAAH,CAAwB9S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC,EALc;;EAQdunB,QAAAA,IAAI;EACP,OATD,MASO,IAAI,KAAKrL,SAAT,EAAoB;EACvB;EACA6Q,QAAAA,aAAa,CAAC,KAAKrI,MAAL,CAAYsI,SAAb,CAAb;EACAD,QAAAA,aAAa,CAAC,KAAKrI,MAAL,CAAYpE,OAAb,CAAb,CAHuB;;EAMvB,YAAI,KAAKnD,KAAL,KAAe,IAAf,IAAuB3d,EAAE,CAACxB,QAAH,CAAY,KAAKmf,KAAL,CAAWgV,OAAvB,CAA3B,EAA4D;EACxD,eAAKhV,KAAL,CAAWgV,OAAX;EACH,SARsB;;;EAWvB5K,QAAAA,IAAI;EACP,OAZM,MAYA,IAAI,KAAK/N,OAAT,EAAkB;EACrB;EACA;EACA,YAAI,KAAK2D,KAAL,KAAe,IAAnB,EAAyB;EACrB,eAAKA,KAAL,CAAW0W,MAAX,GAAoBxyB,IAApB,CAAyBkmB,IAAzB;EACH,SALoB;;;EAQrBrmB,QAAAA,UAAU,CAACqmB,IAAD,EAAO,GAAP,CAAV;EACH;EACJ;EAED;;;;;;;+BAIS3nB,MAAM;EACX,aAAOuI,OAAO,CAACgB,IAAR,CAAanJ,IAAb,CAAkB,IAAlB,EAAwBJ,IAAxB,CAAP;EACH;EAED;;;;;;;;;0BApyBc;EACV,aAAO1E,OAAO,CAAC,KAAKqN,QAAL,KAAkByY,SAAS,CAACjX,KAA7B,CAAd;EACH;;;0BAEa;EACV,aAAO7O,OAAO,CAAC,KAAKghB,SAAL,IAAkB,KAAK1C,OAAxB,CAAd;EACH;;;0BAEe;EACZ,aAAOte,OAAO,CAAC,KAAKqN,QAAL,KAAkByY,SAAS,CAAChT,OAA7B,CAAd;EACH;;;0BAEa;EACV,aAAO9S,OAAO,CAAC,KAAKqN,QAAL,KAAkByY,SAAS,CAACjT,KAA7B,CAAd;EACH;;;0BAEa;EACV,aAAO7S,OAAO,CAAC,KAAK0E,IAAL,KAAcqhB,KAAK,CAAC5Y,KAArB,CAAd;EACH;;;0BAEa;EACV,aAAOnN,OAAO,CAAC,KAAK0E,IAAL,KAAcqhB,KAAK,CAAC7Y,KAArB,CAAd;EACH;;;0BA4Ba;EACV,aAAOlN,OAAO,CAAC,KAAK6F,KAAL,IAAc,CAAC,KAAK0J,MAApB,IAA8B,CAAC,KAAKgc,KAArC,CAAd;EACH;EAED;;;;;;0BAGa;EACT,aAAOvrB,OAAO,CAAC,KAAKqO,KAAL,CAAWkB,MAAZ,CAAd;EACH;EAED;;;;;;0BAGc;EACV,aAAOvP,OAAO,CAAC,KAAKuP,MAAL,IAAe,KAAKD,WAAL,KAAqB,CAArC,CAAd;EACH;EAED;;;;;;0BAGY;EACR,aAAOtP,OAAO,CAAC,KAAKqO,KAAL,CAAWkd,KAAZ,CAAd;EACH;;;wBAwDe1rB,OAAO;EACnB;EACA,UAAI,CAAC,KAAK0X,QAAV,EAAoB;EAChB;EACH,OAJkB;;;EAOnB,UAAMqhB,YAAY,GAAGt0B,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,KAAoBA,KAAK,GAAG,CAAjD,CAPmB;;EAUnB,WAAKwO,KAAL,CAAWiB,WAAX,GAAyBspB,YAAY,GAAGpoB,IAAI,CAAC6I,GAAL,CAASxZ,KAAT,EAAgB,KAAK0X,QAArB,CAAH,GAAoC,CAAzE,CAVmB;;EAanB,WAAKvH,KAAL,CAAWC,GAAX,sBAA6B,KAAKX,WAAlC;EACH;EAED;;;;0BAGkB;EACd,aAAOjP,MAAM,CAAC,KAAKgO,KAAL,CAAWiB,WAAZ,CAAb;EACH;EAED;;;;;;0BAGe;EAAA,UACHyM,QADG,GACU,KAAK1N,KADf,CACH0N,QADG;;EAIX,UAAIzX,EAAE,CAAC1B,MAAH,CAAUmZ,QAAV,CAAJ,EAAyB;EACrB,eAAOA,QAAP;EACH,OANU;EASX;EACA;;;EACA,UAAIA,QAAQ,IAAIA,QAAQ,CAAC7Z,MAArB,IAA+B,KAAKqV,QAAL,GAAgB,CAAnD,EAAsD;EAClD,eAAOwE,QAAQ,CAACuI,GAAT,CAAa,CAAb,IAAkB,KAAK/M,QAA9B;EACH;;EAED,aAAO,CAAP;EACH;EAED;;;;;;0BAGc;EACV,aAAOvX,OAAO,CAAC,KAAKqO,KAAL,CAAWwO,OAAZ,CAAd;EACH;EAED;;;;;;0BAGe;EACX;EACA,UAAMgc,YAAY,GAAGzd,UAAU,CAAC,KAAK3P,MAAL,CAAY8L,QAAb,CAA/B,CAFW;;EAKX,UAAMuhB,YAAY,GAAG,CAAC,KAAKzqB,KAAL,IAAc,EAAf,EAAmBkJ,QAAxC;EACA,UAAMA,QAAQ,GAAG,CAACjT,EAAE,CAAC1B,MAAH,CAAUk2B,YAAV,CAAD,IAA4BA,YAAY,KAAKC,QAA7C,GAAwD,CAAxD,GAA4DD,YAA7E,CANW;;EASX,aAAOD,YAAY,IAAIthB,QAAvB;EACH;EAED;;;;;;;wBAIWjQ,OAAO;EACd,UAAI8P,MAAM,GAAG9P,KAAb;EACA,UAAMqK,GAAG,GAAG,CAAZ;EACA,UAAM0H,GAAG,GAAG,CAAZ;;EAEA,UAAI/U,EAAE,CAAChC,MAAH,CAAU8U,MAAV,CAAJ,EAAuB;EACnBA,QAAAA,MAAM,GAAG/W,MAAM,CAAC+W,MAAD,CAAf;EACH,OAPa;;;EAUd,UAAI,CAAC9S,EAAE,CAAC1B,MAAH,CAAUwU,MAAV,CAAL,EAAwB;EACpBA,QAAAA,MAAM,GAAG,KAAKhE,OAAL,CAAatP,GAAb,CAAiB,QAAjB,CAAT;EACH,OAZa;;;EAed,UAAI,CAACQ,EAAE,CAAC1B,MAAH,CAAUwU,MAAV,CAAL,EAAwB;EACjBA,QAAAA,MADiB,GACN,KAAK3L,MADC,CACjB2L,MADiB;EAEvB,OAjBa;;;EAoBd,UAAIA,MAAM,GAAGzF,GAAb,EAAkB;EACdyF,QAAAA,MAAM,GAAGzF,GAAT;EACH,OAtBa;;;EAwBd,UAAIyF,MAAM,GAAGiC,GAAb,EAAkB;EACdjC,QAAAA,MAAM,GAAGiC,GAAT;EACH,OA1Ba;;;EA6Bd,WAAK5N,MAAL,CAAY2L,MAAZ,GAAqBA,MAArB,CA7Bc;;EAgCd,WAAK/I,KAAL,CAAW+I,MAAX,GAAoBA,MAApB,CAhCc;;EAmCd,UAAI,CAAC9S,EAAE,CAACb,KAAH,CAAS6D,KAAT,CAAD,IAAoB,KAAKmU,KAAzB,IAAkCrE,MAAM,GAAG,CAA/C,EAAkD;EAC9C,aAAKqE,KAAL,GAAa,KAAb;EACH;EACJ;EAED;;;;0BAGa;EACT,aAAOpb,MAAM,CAAC,KAAKgO,KAAL,CAAW+I,MAAZ,CAAb;EACH;;;wBAuBSP,MAAM;EACZ,UAAI1S,MAAM,GAAG0S,IAAb,CADY;;EAIZ,UAAI,CAACvS,EAAE,CAACzB,OAAH,CAAWsB,MAAX,CAAL,EAAyB;EACrBA,QAAAA,MAAM,GAAG,KAAKiP,OAAL,CAAatP,GAAb,CAAiB,OAAjB,CAAT;EACH,OANW;;;EASZ,UAAI,CAACQ,EAAE,CAACzB,OAAH,CAAWsB,MAAX,CAAL,EAAyB;EACrBA,QAAAA,MAAM,GAAG,KAAKsH,MAAL,CAAYgQ,KAArB;EACH,OAXW;;;EAcZ,WAAKhQ,MAAL,CAAYgQ,KAAZ,GAAoBtX,MAApB,CAdY;;EAiBZ,WAAKkK,KAAL,CAAWoN,KAAX,GAAmBtX,MAAnB;EACH;EAED;;;;0BAGY;EACR,aAAOnE,OAAO,CAAC,KAAKqO,KAAL,CAAWoN,KAAZ,CAAd;EACH;EAED;;;;;;0BAGe;EACX;EACA,UAAI,CAAC,KAAKrN,OAAV,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,UAAI,KAAKkd,OAAT,EAAkB;EACd,eAAO,IAAP;EACH,OARU;;;EAWX,aACItrB,OAAO,CAAC,KAAKqO,KAAL,CAAW2qB,WAAZ,CAAP,IACAh5B,OAAO,CAAC,KAAKqO,KAAL,CAAW4qB,2BAAZ,CADP,IAEAj5B,OAAO,CAAC,KAAKqO,KAAL,CAAW6qB,WAAX,IAA0B,KAAK7qB,KAAL,CAAW6qB,WAAX,CAAuBh3B,MAAlD,CAHX;EAKH;EAED;;;;;;;wBAIUrC,OAAO;EACb,UAAIsb,KAAK,GAAG,IAAZ;;EAEA,UAAI7W,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,CAAJ,EAAsB;EAClBsb,QAAAA,KAAK,GAAGtb,KAAR;EACH;;EAED,UAAI,CAACyE,EAAE,CAAC1B,MAAH,CAAUuY,KAAV,CAAL,EAAuB;EACnBA,QAAAA,KAAK,GAAG,KAAK/H,OAAL,CAAatP,GAAb,CAAiB,OAAjB,CAAR;EACH;;EAED,UAAI,CAACQ,EAAE,CAAC1B,MAAH,CAAUuY,KAAV,CAAL,EAAuB;EACnBA,QAAAA,KAAK,GAAG,KAAK1P,MAAL,CAAY0P,KAAZ,CAAkBqI,QAA1B;EACH,OAbY;;;EAgBb,UAAIrI,KAAK,GAAG,GAAZ,EAAiB;EACbA,QAAAA,KAAK,GAAG,GAAR;EACH;;EACD,UAAIA,KAAK,GAAG,GAAZ,EAAiB;EACbA,QAAAA,KAAK,GAAG,GAAR;EACH;;EAED,UAAI,CAAC,KAAK1P,MAAL,CAAY0P,KAAZ,CAAkBvX,OAAlB,CAA0B0G,QAA1B,CAAmC6Q,KAAnC,CAAL,EAAgD;EAC5C,aAAKnL,KAAL,CAAW2H,IAAX,8BAAsCwD,KAAtC;EACA;EACH,OA1BY;;;EA6Bb,WAAK1P,MAAL,CAAY0P,KAAZ,CAAkBqI,QAAlB,GAA6BrI,KAA7B,CA7Ba;;EAgCb,WAAK9M,KAAL,CAAWijB,YAAX,GAA0BnW,KAA1B;EACH;EAED;;;;0BAGY;EACR,aAAO9a,MAAM,CAAC,KAAKgO,KAAL,CAAWijB,YAAZ,CAAb;EACH;EAED;;;;;;;;wBAKYzxB,OAAO;EACf,UAAM4L,MAAM,GAAG,KAAKA,MAAL,CAAYoE,OAA3B;EACA,UAAMjM,OAAO,GAAG,KAAKA,OAAL,CAAaiM,OAA7B;;EAEA,UAAI,CAACjM,OAAO,CAAC1B,MAAb,EAAqB;EACjB;EACH;;EAED,UAAI2N,OAAO,GAAG,CACV,CAACvL,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAD,IAAoBQ,MAAM,CAACR,KAAD,CADhB,EAEV,KAAKuT,OAAL,CAAatP,GAAb,CAAiB,SAAjB,CAFU,EAGV2H,MAAM,CAAC+X,QAHG,EAIV/X,MAAM,CAAC6R,OAJG,EAKZtR,IALY,CAKP1H,EAAE,CAAC1B,MALI,CAAd;EAOA,UAAIu2B,aAAa,GAAG,IAApB;;EAEA,UAAI,CAACv1B,OAAO,CAAC0G,QAAR,CAAiBuF,OAAjB,CAAL,EAAgC;EAC5B,YAAMvI,KAAK,GAAG8I,OAAO,CAACxM,OAAD,EAAUiM,OAAV,CAArB;EACA,aAAKG,KAAL,CAAW2H,IAAX,uCAA+C9H,OAA/C,qBAAiEvI,KAAjE;EACAuI,QAAAA,OAAO,GAAGvI,KAAV,CAH4B;;EAM5B6xB,QAAAA,aAAa,GAAG,KAAhB;EACH,OAxBc;;;EA2Bf1tB,MAAAA,MAAM,CAAC+X,QAAP,GAAkB3T,OAAlB,CA3Be;;EA8Bf,WAAKxB,KAAL,CAAWwB,OAAX,GAAqBA,OAArB,CA9Be;;EAiCf,UAAIspB,aAAJ,EAAmB;EACf,aAAK/lB,OAAL,CAAa/D,GAAb,CAAiB;EAAEQ,UAAAA,OAAO,EAAPA;EAAF,SAAjB;EACH;EACJ;EAED;;;;0BAGc;EACV,aAAO,KAAKxB,KAAL,CAAWwB,OAAlB;EACH;EAED;;;;;;;;wBAKShQ,OAAO;EACZ,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAAK4L,MAAL,CAAY8X,IAAZ,CAAiBhC,MAA5D;EACA,WAAK9V,MAAL,CAAY8X,IAAZ,CAAiBhC,MAAjB,GAA0Bpd,MAA1B;EACA,WAAKkK,KAAL,CAAWkV,IAAX,GAAkBpf,MAAlB,CAHY;;EAMZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCH;EAED;;;;0BAGW;EACP,aAAOnE,OAAO,CAAC,KAAKqO,KAAL,CAAWkV,IAAZ,CAAd;EACH;EAED;;;;;;;wBAIW1jB,OAAO;EACdmP,MAAAA,MAAM,CAAC4oB,MAAP,CAAc9yB,IAAd,CAAmB,IAAnB,EAAyBjF,KAAzB;EACH;EAED;;;;0BAGa;EACT,aAAO,KAAKwO,KAAL,CAAWygB,UAAlB;EACH;EAED;;;;;;0BAGe;EAAA,UACHpP,QADG,GACU,KAAKjU,MAAL,CAAYuU,IADtB,CACHN,QADG;EAGX,aAAOpb,EAAE,CAACd,GAAH,CAAOkc,QAAP,IAAmBA,QAAnB,GAA8B,KAAK1Q,MAA1C;EACH;EAED;;;;;;;wBAIWnP,OAAO;EACd,UAAI,CAAC,KAAKkhB,OAAV,EAAmB;EACf,aAAK/Q,KAAL,CAAW2H,IAAX,CAAgB,kCAAhB;EACA;EACH;;EAEDlK,MAAAA,EAAE,CAACsb,SAAH,CAAajkB,IAAb,CAAkB,IAAlB,EAAwBjF,KAAxB,EAA+B,KAA/B,EAAsCsV,KAAtC,CAA4C,YAAM,EAAlD;EACH;EAED;;;;0BAGa;EACT,UAAI,CAAC,KAAK4L,OAAV,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,aAAO,KAAK1S,KAAL,CAAWY,YAAX,CAAwB,QAAxB,CAAP;EACH;EAED;;;;;;;wBAIapP,OAAO;EAChB,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAAK4L,MAAL,CAAYsX,QAAvD;EACA,WAAKtX,MAAL,CAAYsX,QAAZ,GAAuB5e,MAAvB;EACH;EAED;;;;0BAGe;EACX,aAAOnE,OAAO,CAAC,KAAKyL,MAAL,CAAYsX,QAAb,CAAd;EACH;;;wBAcgBljB,OAAO;EACpBkX,MAAAA,QAAQ,CAAC1H,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwBjF,KAAxB,EAA+B,KAA/B;EACH;EAED;;;;0BAGmB;EAAA,2BACmB,KAAKkX,QADxB;EAAA,UACPmH,OADO,kBACPA,OADO;EAAA,UACEhD,YADF,kBACEA,YADF;EAEf,aAAOgD,OAAO,GAAGhD,YAAH,GAAkB,CAAC,CAAjC;EACH;EAED;;;;;;;;wBAKarb,OAAO;EAChBkX,MAAAA,QAAQ,CAAC+K,WAAT,CAAqBhd,IAArB,CAA0B,IAA1B,EAAgCjF,KAAhC,EAAuC,KAAvC;EACH;EAED;;;;0BAGe;EACX,aAAO,CAACkX,QAAQ,CAACwL,eAAT,CAAyBzd,IAAzB,CAA8B,IAA9B,KAAuC,EAAxC,EAA4CqZ,QAAnD;EACH;EAED;;;;;;;;wBAKQte,OAAO;EACX;EACA,UAAI,CAACoN,OAAO,CAACU,GAAb,EAAkB;EACd;EACH,OAJU;;;EAOX,UAAMxJ,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,CAAC,KAAK8N,GAAjD,CAPW;EAUX;;EACA,UAAIrJ,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWT,yBAAvB,CAAJ,EAAuD;EACnD,aAAKS,KAAL,CAAWT,yBAAX,CAAqCzJ,MAAM,GAAGwJ,GAAG,CAAC4T,MAAP,GAAgB5T,GAAG,CAACkY,QAA/D;EACH,OAbU;;;EAgBX,UAAIvhB,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAW+qB,uBAAvB,CAAJ,EAAqD;EACjD,YAAI,CAAC,KAAKzrB,GAAN,IAAaxJ,MAAjB,EAAyB;EACrB,eAAKkK,KAAL,CAAW+qB,uBAAX;EACH,SAFD,MAEO,IAAI,KAAKzrB,GAAL,IAAY,CAACxJ,MAAjB,EAAyB;EAC5BwD,UAAAA,QAAQ,CAAC0xB,oBAAT;EACH;EACJ;EACJ;EAED;;;;0BAGU;EACN,UAAI,CAACpsB,OAAO,CAACU,GAAb,EAAkB;EACd,eAAO,IAAP;EACH,OAHK;;;EAMN,UAAI,CAACrJ,EAAE,CAACb,KAAH,CAAS,KAAK4K,KAAL,CAAWirB,sBAApB,CAAL,EAAkD;EAC9C,eAAO,KAAKjrB,KAAL,CAAWirB,sBAAX,KAAsC3rB,GAAG,CAAC4T,MAAjD;EACH,OARK;;;EAWN,aAAO,KAAKlT,KAAL,KAAe1G,QAAQ,CAAC4xB,uBAA/B;EACH;;;gCA6LgB70B,MAAM2I,UAAUmsB,QAAQ;EACrC,aAAOvsB,OAAO,CAACG,KAAR,CAAc1I,IAAd,EAAoB2I,QAApB,EAA8BmsB,MAA9B,CAAP;EACH;EAED;;;;;;;;oCAKkBh2B,KAAK+F,IAAI;EACvB,aAAO+K,UAAU,CAAC9Q,GAAD,EAAM+F,EAAN,CAAjB;EACH;EAED;;;;;;;;4BAKaT,UAAwB;EAAA,UAAdlF,OAAc,uEAAJ,EAAI;EACjC,UAAI0C,OAAO,GAAG,IAAd;;EAEA,UAAIhC,EAAE,CAAChC,MAAH,CAAUwG,QAAV,CAAJ,EAAyB;EACrBxC,QAAAA,OAAO,GAAGzF,KAAK,CAAC0F,IAAN,CAAWoB,QAAQ,CAAC0C,gBAAT,CAA0BvB,QAA1B,CAAX,CAAV;EACH,OAFD,MAEO,IAAIxE,EAAE,CAACrB,QAAH,CAAY6F,QAAZ,CAAJ,EAA2B;EAC9BxC,QAAAA,OAAO,GAAGzF,KAAK,CAAC0F,IAAN,CAAWuC,QAAX,CAAV;EACH,OAFM,MAEA,IAAIxE,EAAE,CAACvB,KAAH,CAAS+F,QAAT,CAAJ,EAAwB;EAC3BxC,QAAAA,OAAO,GAAGwC,QAAQ,CAACzB,MAAT,CAAgB/C,EAAE,CAACpB,OAAnB,CAAV;EACH;;EAED,UAAIoB,EAAE,CAACb,KAAH,CAAS6C,OAAT,CAAJ,EAAuB;EACnB,eAAO,IAAP;EACH;;EAED,aAAOA,OAAO,CAACwD,GAAR,CAAY,UAAA2vB,CAAC;EAAA,eAAI,IAAI1B,IAAJ,CAAS0B,CAAT,EAAY71B,OAAZ,CAAJ;EAAA,OAAb,CAAP;EACH;;;;;;EAGLm0B,IAAI,CAACjV,QAAL,GAAgBpS,SAAS,CAACoS,QAAD,CAAzB","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-res')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('data-res');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","match","querySelectorAll","includes","prototype","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","generateId","prefix","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","create","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","inactive","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('data-res')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/templates/libs/plyr/plyr.min.js b/templates/libs/plyr/plyr.min.js
index 9f34509..c6f406a 100644
--- a/templates/libs/plyr/plyr.min.js
+++ b/templates/libs/plyr/plyr.min.js
@@ -1,2 +1,2 @@
-"object"==typeof navigator&&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";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(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)}}function n(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,a=!1,s=void 0;try{for(var o,r=e[Symbol.iterator]();!(i=(o=r.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){a=!0,s=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var o=function(e){return null!=e?e.constructor:null},r=function(e,t){return Boolean(e&&t&&e instanceof t)},l=function(e){return null==e},c=function(e){return o(e)===Object},u=function(e){return o(e)===String},d=function(e){return Array.isArray(e)},h=function(e){return r(e,NodeList)},p=function(e){return l(e)||(u(e)||d(e)||h(e))&&!e.length||c(e)&&!Object.keys(e).length},m={nullOrUndefined:l,object:c,number:function(e){return o(e)===Number&&!Number.isNaN(e)},string:u,boolean:function(e){return o(e)===Boolean},function:function(e){return o(e)===Function},array:d,weakMap:function(e){return r(e,WeakMap)},nodeList:h,element:function(e){return r(e,Element)},textNode:function(e){return o(e)===Text},event:function(e){return r(e,Event)},keyboardEvent:function(e){return r(e,KeyboardEvent)},cue:function(e){return r(e,window.TextTrackCue)||r(e,window.VTTCue)},track:function(e){return r(e,TextTrack)||!l(e)&&u(e.kind)},url:function(e){if(r(e,window.URL))return!0;if(!u(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!p(new URL(t).hostname)}catch(e){return!1}},empty:p},f=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function g(e,t,n){var i=this,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!m.empty(t)&&m.function(n)){var r=t.split(" "),l=o;f&&(l={passive:s,capture:o}),r.forEach(function(t){i&&i.eventListeners&&a&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[a?"addEventListener":"removeEventListener"](t,n,l)})}}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,n,!0,i,a)}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,n,!1,i,a)}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,function s(){v(e,t,s,i,a);for(var o=arguments.length,r=new Array(o),l=0;l<o;l++)r[l]=arguments[l];n.apply(this,r)},!0,i,a)}function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(m.element(e)&&!m.empty(t)){var a=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(a)}}function w(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,a=e.parentNode,s=e.nextSibling;i.appendChild(e),s?a.insertBefore(i,s):a.appendChild(i)})}function T(e,t){m.element(e)&&!m.empty(t)&&Object.entries(t).filter(function(e){var t=a(e,2)[1];return!m.nullOrUndefined(t)}).forEach(function(t){var n=a(t,2),i=n[0],s=n[1];return e.setAttribute(i,s)})}function A(e,t,n){var i=document.createElement(e);return m.object(t)&&T(i,t),m.string(n)&&(i.innerText=n),i}function E(e,t,n,i){m.element(t)&&t.appendChild(A(e,n,i))}function P(e){m.nodeList(e)||m.array(e)?Array.from(e).forEach(P):m.element(e)&&m.element(e.parentNode)&&e.parentNode.removeChild(e)}function C(e){if(m.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function S(e,t){return m.element(t)&&m.element(t.parentNode)&&m.element(e)?(t.parentNode.replaceChild(e,t),e):null}function M(e,t){if(!m.string(e)||m.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),a=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),o=s[0],r=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":m.object(i)&&m.string(i.class)&&(i.class+=" ".concat(a)),n.class=a;break;case"#":n.id=t.replace("#","");break;case"[":n[o]=r}}),n}function N(e,t){if(m.element(e)){var n=t;m.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function L(e,t,n){if(m.nodeList(e))return Array.from(e).map(function(e){return L(e,t,n)});if(m.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function x(e,t){return m.element(e)&&e.classList.contains(t)}function I(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function _(e){return this.elements.container.querySelectorAll(e)}function j(e){return this.elements.container.querySelector(e)}function O(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];m.element(e)&&(e.focus({preventScroll:!0}),t&&L(e,this.config.classNames.tabFocus))}var q,R,B,D=(q=document.createElement("span"),R={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},B=Object.keys(R).find(function(e){return void 0!==q.style[e]}),!!m.string(B)&&R[B]);function H(e){setTimeout(function(){try{N(e,!0),e.offsetHeight,N(e,!1)}catch(e){}},0)}var V,F={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)},U={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},W={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=F.isIPhone&&n&&W.playsinline,a=W[e]||"html5"!==t;return{api:a,ui:a&&W.rangeInput&&("video"!==e||!F.isIPhone||i)}},pip:!(F.isIPhone||!m.function(A("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||A("video").disablePictureInPicture)),airplay:m.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=a(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(U).includes(n)&&(n+='; codecs="'.concat(U[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(V=document.createElement("input"),V.type="range","range"===V.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==D,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},K={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return W.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return K.getSources.call(this).map(function(e){return Number(e.getAttribute("data-res"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=K.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("data-res"))},set:function(t){var n=K.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,a=i.currentTime,s=i.paused,o=i.preload,r=i.readyState;e.media.src=n.getAttribute("data-res"),("none"!==o||r)&&(e.once("loadedmetadata",function(){e.currentTime=a,s||e.play()}),e.media.load()),k.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(P(K.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function z(e){return m.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Y(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function J(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];if(!n.length)return e;var s=n.shift();return m.object(s)?(Object.keys(s).forEach(function(t){m.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,i({},t,{})),J(e[t],s[t])):Object.assign(e,i({},t,s[t]))}),J.apply(void 0,[e].concat(n))):e}function Q(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return m.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function $(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function G(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function X(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=$(e,"-"," "),e=$(e,"_"," "),$(e=G(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Z(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var ee={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},te=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(m.empty(e)||m.empty(t))return"";var n=Y(t.i18n,e);if(m.empty(n))return Object.keys(ee).includes(e)?ee[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=a(e,2),i=t[0],s=t[1];n=$(n,i,s)}),n},ne=function(){function t(n){e(this,t),this.enabled=n.config.storage.enabled,this.key=n.config.storage.key}return n(t,[{key:"get",value:function(e){if(!t.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(m.empty(n))return null;var i=JSON.parse(n);return m.string(e)&&e.length?i[e]:i}},{key:"set",value:function(e){if(t.supported&&this.enabled&&m.object(e)){var n=this.get();m.empty(n)&&(n={}),J(n,e),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),t}();function ie(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var a=new XMLHttpRequest;if(!("withCredentials"in a))return;a.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(a.responseText))}catch(e){n(a.responseText)}else n(a.response)}),a.addEventListener("error",function(){throw new Error(a.status)}),a.open("GET",e,!0),a.responseType=t,a.send()}catch(e){i(e)}})}function ae(e,t){if(m.string(e)){var n=m.string(t),i=function(){return null!==document.getElementById(t)},a=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var s=ne.supported,o=document.createElement("div");if(o.setAttribute("hidden",""),n&&o.setAttribute("id",t),s){var r=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==r){var l=JSON.parse(r);a(o,l.content)}}ie(e).then(function(e){m.empty(e)||(s&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),a(o,e))}).catch(function(){})}}}var se=function(e){return parseInt(e/60/60%60,10)},oe=function(e){return parseInt(e/60%60,10)},re=function(e){return parseInt(e%60,10)};function le(){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(!m.number(e))return le(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},a=se(e),s=oe(e),o=re(e);return a=t||a>0?"".concat(a,":"):"","".concat(n&&e>0?"-":"").concat(a).concat(i(s),":").concat(i(o))}var ce={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||F.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=j.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:_.call(this,this.config.selectors.buttons.play),pause:j.call(this,this.config.selectors.buttons.pause),restart:j.call(this,this.config.selectors.buttons.restart),rewind:j.call(this,this.config.selectors.buttons.rewind),fastForward:j.call(this,this.config.selectors.buttons.fastForward),mute:j.call(this,this.config.selectors.buttons.mute),pip:j.call(this,this.config.selectors.buttons.pip),airplay:j.call(this,this.config.selectors.buttons.airplay),settings:j.call(this,this.config.selectors.buttons.settings),captions:j.call(this,this.config.selectors.buttons.captions),fullscreen:j.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=j.call(this,this.config.selectors.progress),this.elements.inputs={seek:j.call(this,this.config.selectors.inputs.seek),volume:j.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:j.call(this,this.config.selectors.display.buffer),currentTime:j.call(this,this.config.selectors.display.currentTime),duration:j.call(this,this.config.selectors.display.duration)},m.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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}},createIcon:function(e,t){var n=ce.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),a=document.createElementNS("http://www.w3.org/2000/svg","svg");T(a,J(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),o="".concat(i,"-").concat(e);return"href"in s&&s.setAttributeNS("http://www.w3.org/1999/xlink","href",o),s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),a.appendChild(s),a},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=te(e,this.config);return A("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(m.empty(e))return null;var t=A("span",{class:this.config.classNames.menu.value});return t.appendChild(A("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=X(e),a={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(a[e]=n[e],delete n[e])}),"button"!==a.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":a.toggle=!0,a.label="play",a.labelPressed="pause",a.icon="play",a.iconPressed="pause";break;case"mute":a.toggle=!0,a.label="mute",a.labelPressed="unmute",a.icon="volume",a.iconPressed="muted";break;case"captions":a.toggle=!0,a.label="enableCaptions",a.labelPressed="disableCaptions",a.icon="captions-off",a.iconPressed="captions-on";break;case"fullscreen":a.toggle=!0,a.label="enterFullscreen",a.labelPressed="exitFullscreen",a.icon="enter-fullscreen",a.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",a.label="play",a.icon="play";break;default:m.empty(a.label)&&(a.label=i),m.empty(a.icon)&&(a.icon=e)}var s=A(a.element);return a.toggle?(s.appendChild(ce.createIcon.call(this,a.iconPressed,{class:"icon--pressed"})),s.appendChild(ce.createIcon.call(this,a.icon,{class:"icon--not-pressed"})),s.appendChild(ce.createLabel.call(this,a.labelPressed,{class:"label--pressed"})),s.appendChild(ce.createLabel.call(this,a.label,{class:"label--not-pressed"}))):(s.appendChild(ce.createIcon.call(this,a.icon)),s.appendChild(ce.createLabel.call(this,a.label))),J(n,M(this.config.selectors.buttons[i],n)),T(s,n),"play"===i?(m.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(s)):this.elements.buttons[i]=s,s},createRange:function(e,t){var n=A("input",J(M(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":te(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,ce.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=A("progress",J(M(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(A("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],a=i?te(i,this.config):"";n.innerText="% ".concat(a.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=M(this.config.selectors.display[e]),n=A("div",J(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":te(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;y(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var a,s=I(e,'[role="menuitemradio"]');if(!s&&[32,39].includes(i.which))ce.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||s&&39===i.which?(a=e.nextElementSibling,m.element(a)||(a=e.parentNode.firstElementChild)):(a=e.previousElementSibling,m.element(a)||(a=e.parentNode.lastElementChild)),O.call(n,a,!0))}},!1),y(e,"keyup",function(e){13===e.which&&ce.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,a=e.type,s=e.title,o=e.badge,r=void 0===o?null:o,l=e.checked,c=void 0!==l&&l,u=M(this.config.selectors.inputs[a]),d=A("button",J(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=A("span");h.innerHTML=s,m.element(r)&&h.appendChild(r),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return I(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!m.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,a){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}ce.showMenuPanel.call(t,"home",m.keyboardEvent(e))}},a,!1),ce.bindMenuItemShortcuts.call(this,d,a),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return m.number(e)?le(e,se(this.duration)>0,t):e},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];m.element(e)&&m.number(t)&&(e.innerText=ce.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(m.element(this.elements.inputs.volume)&&ce.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),m.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;m.element(e)&&(e.value=t,ce.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&m.event(e)){var n,i,a=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,a=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&ce.setRange.call(this,this.elements.inputs.seek,a);break;case"playing":case"progress":!function(e,n){var i=m.number(n)?n:0,a=m.element(e)?e:t.elements.display.buffer;if(m.element(a)){a.value=i;var s=a.getElementsByTagName("span")[0];m.element(s)&&(s.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=m.event(e)?e.target:e;if(m.element(t)&&"range"===t.getAttribute("type")){if(I(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=ce.formatTime(this.currentTime),i=ce.formatTime(this.duration),a=te("seekLabel",this.config);t.setAttribute("aria-valuetext",a.replace("{currentTime}",n).replace("{duration}",i))}else if(I(t,this.config.selectors.inputs.volume)){var s=100*t.value;t.setAttribute("aria-valuenow",s),t.setAttribute("aria-valuetext","".concat(s.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);F.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&m.element(this.elements.inputs.seek)&&m.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),a="".concat(this.config.classNames.tooltip,"--visible"),s=function(e){L(t.elements.display.seekTooltip,a,e)};if(this.touch)s(!1);else{if(m.event(e))n=100/i.width*(e.pageX-i.left);else{if(!x(this.elements.display.seekTooltip,a))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ce.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),m.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!m.element(this.elements.display.duration)&&this.config.invertTime;ce.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ce.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return N(this.elements.display.currentTime,!0),void N(this.elements.progress,!0);m.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=m.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ce.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ce.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),ce.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){N(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],a=null,s=t;if("captions"===e)a=this.currentTrack;else{if(a=m.empty(n)?this[e]:n,m.empty(a)&&(a=this.config[e].default),!m.empty(this.options[e])&&!this.options[e].includes(a))return void this.debug.warn("Unsupported value of '".concat(a,"' for ").concat(e));if(!this.config[e].options.includes(a))return void this.debug.warn("Disabled value of '".concat(a,"' for ").concat(e))}if(m.element(s)||(s=i&&i.querySelector('[role="menu"]')),m.element(s)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=ce.getLabel.call(this,e,a);var o=s&&s.querySelector('[value="'.concat(a,'"]'));m.element(o)&&(o.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?te("normal",this.config):"".concat(t,"&times;");case"quality":if(m.number(t)){var n=te("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return G(t);case"captions":return he.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(m.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');m.array(e)&&(this.options.quality=z(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!m.empty(this.options.quality)&&this.options.quality.length>1;if(ce.toggleMenuButton.call(this,"quality",i),C(n),ce.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){ce.createMenuItem.call(t,{value:e,list:n,type:"quality",title:ce.getLabel.call(t,"quality",e),badge:function(e){var n=te("qualityBadge.".concat(e),t.config);return n.length?ce.createBadge.call(t,n):null}(e)})}),ce.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(m.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=he.getTracks.call(this),i=Boolean(n.length);if(ce.toggleMenuButton.call(this,"captions",i),C(t),ce.checkMenu.call(this),i){var a=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:he.getLabel.call(e,n),badge:n.language&&ce.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});a.unshift({value:-1,checked:!this.captions.toggled,title:te("disabled",this.config),list:t,type:"language"}),a.forEach(ce.createMenuItem.bind(this)),ce.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(m.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');m.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!m.empty(this.options.speed)&&this.options.speed.length>1;ce.toggleMenuButton.call(this,"speed",i),C(n),ce.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){ce.createMenuItem.call(t,{value:e,list:n,type:"speed",title:ce.getLabel.call(t,"speed",e)})}),ce.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!m.empty(e)&&Object.values(e).some(function(e){return!e.hidden});N(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;m.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');O.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(m.element(t)&&m.element(n)){var i=t.hidden,a=i;if(m.boolean(e))a=e;else if(m.keyboardEvent(e)&&27===e.which)a=!1;else if(m.event(e)){var s=t.contains(e.target);if(s||!s&&e.target!==n&&a)return}n.setAttribute("aria-expanded",a),N(t,!a),L(this.elements.container,this.config.classNames.menu.open,a),a&&m.keyboardEvent(e)?ce.focusFirstMenuItem.call(this,null,!0):a||i||O.call(this,n,m.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return P(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(m.element(i)){var a=i.parentNode,s=Array.from(a.children).find(function(e){return!e.hidden});if(W.transitions&&!W.reducedMotion){a.style.width="".concat(s.scrollWidth,"px"),a.style.height="".concat(s.scrollHeight,"px");var o=ce.getMenuSize.call(this,i);y.call(this,a,D,function t(n){n.target===a&&["width","height"].includes(n.propertyName)&&(a.style.width="",a.style.height="",v.call(e,a,D,t))}),a.style.width="".concat(o.width,"px"),a.style.height="".concat(o.height,"px")}N(s,!0),N(i,!1),ce.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;m.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=A("div",M(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(ce.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(ce.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(ce.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(ce.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=A("div",M(this.config.selectors.progress));if(i.appendChild(ce.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(ce.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=A("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(ce.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(ce.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var s=A("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&s.appendChild(ce.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o={max:1,step:.05,value:this.config.volume};s.appendChild(ce.createRange.call(this,"volume",J(o,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=s}n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(ce.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!m.empty(this.config.settings)){var r=A("div",{class:"plyr__menu",hidden:""});r.appendChild(ce.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=A("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=A("div"),u=A("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=A("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=A("button",J(M(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));ce.bindMenuItemShortcuts.call(t,i,n),y(i,"click",function(){ce.showMenuPanel.call(t,n,!1)});var a=A("span",null,te(n,t.config)),s=A("span",{class:t.config.classNames.menu.value});s.innerHTML=e[n],a.appendChild(s),i.appendChild(a),d.appendChild(i);var o=A("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),r=A("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});r.appendChild(A("span",{"aria-hidden":!0},te(n,t.config))),r.appendChild(A("span",{class:t.config.classNames.hidden},te("menuBack",t.config))),y(o,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),ce.showMenuPanel.call(t,"home",!0))},!1),y(r,"click",function(){ce.showMenuPanel.call(t,"home",!1)}),o.appendChild(r),o.appendChild(A("div",{role:"menu"})),c.appendChild(o),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=o}),l.appendChild(c),r.appendChild(l),n.appendChild(r),this.elements.settings.popup=l,this.elements.settings.menu=r}if(this.config.controls.includes("pip")&&W.pip&&n.appendChild(ce.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&W.airplay&&n.appendChild(ce.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!m.url(p)&&this.isEmbed&&J(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(ce.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(ce.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(ce.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&ce.setQualityMenu.call(this,K.getQualityOptions.call(this)),ce.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=ce.getIconUrl.call(this);t.cors&&ae(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;m.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this.props)),this.config.controls||(this.config.controls=[]),m.element(this.config.controls)||m.string(this.config.controls)?n=this.config.controls:(n=ce.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:he.getLabel.call(this)}),s=!1);var o,r=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=a(e,2),i=n[0],s=n[1];t=$(t,"{".concat(i,"}"),s)}),t};if(s&&(m.string(this.config.controls)?n=r(n):m.element(n)&&(n.innerHTML=r(n.innerHTML))),m.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),m.element(o)||(o=this.elements.container),o[m.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),m.element(this.elements.controls)||ce.findElements.call(this),!m.empty(this.elements.buttons)){var l=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return x(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];L(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){m.array(e)||m.nodeList(e)?Array.from(e).filter(Boolean).forEach(l):l(e)})}if(window.navigator.userAgent.includes("Edge")&&H(o),this.config.tooltips.controls){var c=this.config,u=c.classNames,d=c.selectors,h="".concat(d.controls.wrapper," ").concat(d.labels," .").concat(u.hidden),p=_.call(this,h);Array.from(p).forEach(function(t){L(t,e.config.classNames.hidden,!1),L(t,e.config.classNames.tooltip,!0)})}}};function ue(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function de(e){var t=new URLSearchParams;return m.object(e)&&Object.entries(e).forEach(function(e){var n=a(e,2),i=n[0],s=n[1];t.set(i,s)}),t}var he={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!W.textTracks)m.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ce.setCaptionsMenu.call(this);else{var e,t;if(m.element(this.elements.captions)||(this.elements.captions=A("div",M(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,m.element(e)&&m.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),F.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=ue(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&ie(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){P(e)})})}var i=z((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),s=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===s)s=a(i,1)[0];var o=this.storage.get("captions");if(m.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:s,languages:i}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";y.call(this,this.media.textTracks,r,he.update.bind(this))}setTimeout(he.update.bind(this),0)}},update:function(){var e=this,t=he.getTracks.call(this,!0),n=this.captions,i=n.active,a=n.language,s=n.meta,o=n.currentTrackNode,r=Boolean(t.find(function(e){return e.language===a}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!s.get(e)}).forEach(function(t){e.debug.log("Track added",t),s.set(t,{default:"showing"===t.mode}),t.mode="hidden",y.call(e,t,"cuechange",function(){return he.updateCues.call(e)})}),(r&&this.language!==a||!t.includes(o))&&(he.setLanguage.call(this,a),he.toggle.call(this,i&&r)),L(this.elements.container,this.config.classNames.captions.enabled,!m.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&ce.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,a=m.nullOrUndefined(e)?!n:e;if(a!==n){if(t||(this.captions.active=a,this.storage.set({captions:a})),!this.language&&a&&!t){var o=he.getTracks.call(this),r=he.findTrack.call(this,[this.captions.language].concat(s(this.captions.languages)),!0);return this.captions.language=r.language,void he.set.call(this,o.indexOf(r))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=a),L(this.elements.container,i,a),this.captions.toggled=a,ce.updateSetting.call(this,"captions"),k.call(this,this.media,a?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=he.getTracks.call(this);if(-1!==e)if(m.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],a=(i||{}).language;this.captions.currentTrackNode=i,ce.updateSetting.call(this,"captions"),t||(this.captions.language=a,this.storage.set({language:a})),this.isVimeo&&this.embed.enableTextTrack(a),k.call(this,this.media,"languagechange")}he.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&he.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else he.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(m.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=he.getTracks.call(this),a=he.findTrack.call(this,[n]);he.set.call(this,i.indexOf(a),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=he.getTracks.call(this),s=function(e){return Number((n.captions.meta.get(e)||{}).default)},o=Array.from(a).sort(function(e,t){return s(t)-s(e)});return e.every(function(e){return!(t=o.find(function(t){return t.language===e}))}),t||(i?o[0]:void 0)},getCurrentTrack:function(){return he.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!m.track(t)&&W.textTracks&&this.captions.toggled&&(t=he.getCurrentTrack.call(this)),m.track(t)?m.empty(t.label)?m.empty(t.language)?te("enabled",this.config):e.language.toUpperCase():t.label:te("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(m.element(this.elements.captions))if(m.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=he.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Z)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){C(this.elements.captions);var a=A("span",M(this.config.selectors.caption));a.innerHTML=i,this.elements.captions.appendChild(a),k.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},pe={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.4.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","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"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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,publisherId:""}},me="picture-in-picture",fe="inline",ge={html5:"html5",youtube:"youtube",vimeo:"vimeo"},ye={audio:"audio",video:"video"};var ve=function(){},be=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e(this,t),this.enabled=window.console&&n,this.enabled&&this.log("Debugging enabled")}return n(t,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ve}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ve}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ve}}]),t}();function ke(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;m.element(e)&&(e.pressed=this.active),k.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),F.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(m.element(e)){var n=_.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],a=n[n.length-1];g.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==a||e.shiftKey?t===i&&e.shiftKey&&(a.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function we(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",L(this.target,this.player.config.classNames.fullscreen.fallback,t),F.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var a=m.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!a,a||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return H(e.target)},100)}ke.call(this)}var Te=function(){function t(n){var i=this;e(this,t),this.player=n,this.prefix=t.prefix,this.property=t.property,this.scrollPosition={x:0,y:0},y.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){ke.call(i)}),y.call(this.player,this.player.elements.container,"dblclick",function(e){m.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return n(t,[{key:"update",value:function(){this.enabled?this.player.debug.log("".concat(t.native?"Native":"Fallback"," fullscreen enabled")):this.player.debug.log("Fullscreen not supported and fallback disabled"),L(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(F.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():t.native?this.prefix?m.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen():we.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(F.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(t.native)if(this.prefix){if(!m.empty(this.prefix)){var e="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(e).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else we.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(t.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(t.native?(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target:x(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return F.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(m.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!m.function(document["".concat(t,"ExitFullscreen")])&&!m.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),t}();function Ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var a=new Image,s=function(){delete a.onload,delete a.onerror,(a.naturalWidth>=t?n:i)(a)};Object.assign(a,{onload:s,onerror:s,src:e})})}var Ee={addStyleHook:function(){L(this.elements.container,this.config.selectors.container.replace(".",""),!0),L(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(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void Ee.toggleNativeControls.call(this,!0);m.element(this.elements.controls)||(ce.inject.call(this),this.listeners.controls()),Ee.toggleNativeControls.call(this),this.isHTML5&&he.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ce.updateVolume.call(this),ce.timeUpdate.call(this),Ee.checkPlaying.call(this),L(this.elements.container,this.config.classNames.pip.supported,W.pip&&this.isHTML5&&this.isVideo),L(this.elements.container,this.config.classNames.airplay.supported,W.airplay&&this.isHTML5),L(this.elements.container,this.config.classNames.isIos,F.isIos),L(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){k.call(e,e.media,"ready")},0),Ee.setTitle.call(this),this.poster&&Ee.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&ce.durationUpdate.call(this)},setTitle:function(){var e=te("play",this.config);if(m.string(this.config.title)&&!m.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=j.call(this,"iframe");if(!m.element(t))return;var n=m.empty(this.config.title)?"video":this.config.title,i=te("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){L(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):y.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return Ae(e)}).catch(function(n){throw e===t.poster&&Ee.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),Ee.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;L(this.elements.container,this.config.classNames.playing,this.playing),L(this.elements.container,this.config.classNames.paused,this.paused),L(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),m.event(e)&&"timeupdate"===e.type||Ee.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){L(t.elements.container,t.config.classNames.loading,t.loading),Ee.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}},Pe=function(){function t(n){e(this,t),this.player=n,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return n(t,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,a="keydown"===e.type,s=a&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&m.number(i)){if(a){var o=document.activeElement;if(m.element(o)){var r=t.config.selectors.editable;if(o!==n.inputs.seek&&I(o,r))return;if(32===e.which&&I(o,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:s||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:s||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:s||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===i&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){ce.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,L(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,a=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||a)i=t.config.classNames.tabFocus,L(_.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&L(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&g.call(t,window,"keydown keyup",this.handleKey,e,!1),g.call(t,document.body,"click",this.toggleMenu,e),b.call(t,document.body,"touchstart",this.firstTouch),g.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.elements;!e.config.keyboard.global&&e.config.keyboard.focused&&y.call(e,t.container,"keydown keyup",this.handleKey,!1),y.call(e,t.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(n){var i=t.controls;i&&"enterfullscreen"===n.type&&(i.pressed=!1,i.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(n.type)&&(Ee.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return Ee.toggleControls.call(e,!1)},a)})}},{key:"media",value:function(){var e=this.player,t=e.elements;if(y.call(e,e.media,"timeupdate seeking seeked",function(t){return ce.timeUpdate.call(e,t)}),y.call(e,e.media,"durationchange loadeddata loadedmetadata",function(t){return ce.durationUpdate.call(e,t)}),y.call(e,e.media,"canplay loadeddata",function(){N(t.volume,!e.hasAudio),N(t.buttons.mute,!e.hasAudio)}),y.call(e,e.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&e.restart()}),y.call(e,e.media,"progress playing seeking seeked",function(t){return ce.updateProgress.call(e,t)}),y.call(e,e.media,"volumechange",function(t){return ce.updateVolume.call(e,t)}),y.call(e,e.media,"playing play pause ended emptied timeupdate",function(t){return Ee.checkPlaying.call(e,t)}),y.call(e,e.media,"waiting canplay seeked playing",function(t){return Ee.checkLoading.call(e,t)}),y.call(e,e.media,"playing",function(){e.ads&&e.ads.enabled&&!e.ads.initialized&&e.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.play()})}),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){var n=j.call(e,".".concat(e.config.classNames.video));if(!m.element(n))return;y.call(e,t.container,"click",function(i){([t.container,n].includes(i.target)||n.contains(i.target))&&(e.touch&&e.config.hideControls||(e.ended?(e.restart(),e.play()):e.togglePlay()))})}e.supported.ui&&e.config.disableContextMenu&&y.call(e,t.wrapper,"contextmenu",function(e){e.preventDefault()},!1),y.call(e,e.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),y.call(e,e.media,"ratechange",function(){ce.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),y.call(e,e.media,"qualitychange",function(t){ce.updateSetting.call(e,"quality",null,t.detail.quality)}),y.call(e,e.media,"ready qualitychange",function(){ce.setDownloadLink.call(e)});var i=e.config.events.concat(["keyup","keydown"]).join(" ");y.call(e,e.media,i,function(n){var i=n.detail,a=void 0===i?{}:i;"error"===n.type&&(a=e.media.error),k.call(e,t.container,n.type,!0,a)})}},{key:"proxy",value:function(e,t,n){var i=this.player,a=i.config.listeners[n],s=!0;m.function(a)&&(s=a.call(i,e)),s&&m.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.player,r=o.config.listeners[i],l=m.function(r);y.call(o,e,t,function(e){return a.proxy(e,n,i)},s&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=F.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){k.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),ce.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),ce.toggleMenu.call(t,e)):ce.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&ce.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!m.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var a=n.hasAttribute("play-on-seeked"),s=["mouseup","touchend","keyup"].includes(e.type);a&&s?(n.removeAttribute("play-on-seeked"),t.play()):!s&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),F.isIos){var s=_.call(t,'input[type="range"]');Array.from(s).forEach(function(t){return e.bind(t,i,function(e){return H(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");m.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return ce.updateSeekTooltip.call(t,e)}),F.isWebkit&&Array.from(_.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return ce.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!m.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,ce.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,a=t.timers;L(i.controls,n.classNames.noTransition,!0),Ee.toggleControls.call(t,!0),setTimeout(function(){L(i.controls,n.classNames.noTransition,!1)},0);var s=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return Ee.toggleControls.call(t,!1)},s)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=a([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),s=i[0],o=i[1],r=Math.sign(Math.abs(s)>Math.abs(o)?s:o);t.increaseVolume(r/50);var l=t.media.volume;(1===r&&l<1||-1===r&&l>0)&&e.preventDefault()},"volume",!1)}}]),t}();"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce,Se=(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function a(e,t){if(e){var a=i[e];if(n[e]=t,a)for(;a.length;)a[0](e,t),a.splice(0,1)}}function s(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function o(t,n,i,a){var s,r,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");a=a||0,/(^css!|\.css$)/.test(t)?(s=!0,(r=l.createElement("link")).rel="stylesheet",r.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=l.createElement("img")).src=h:((r=l.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var l=e.type[0];if(s&&"hideFocus"in r)try{r.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(a+=1)<u)return o(t,n,i,a);n(t,l,e.defaultPrevented)},!1!==d(t,r)&&l.head.appendChild(r)}function r(e,n,i){var r,l;if(n&&n.trim&&(r=n),l=(r?i:n)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,n){var i,a,s=(e=e.push?e:[e]).length,r=s,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--s||t(l)},a=0;a<r;a++)o(e[a],i,n)}(e,function(e){s(l,e),a(r,e)},l)}return r.ready=function(e,t){return function(e,t){e=e.push?e:[e];var a,s,o,r=[],l=e.length,c=l;for(a=function(e,n){n.length&&r.push(e),--c||t(r)};l--;)s=e[l],(o=n[s])?a(s,o):(i[s]=i[s]||[]).push(a)}(e,function(e){s(t,e)}),r},r.done=function(e){a(e,[])},r.reset=function(){t={},n={},i={}},r.isDefined=function(e){return e in t},r}()}(Ce={exports:{}},Ce.exports),Ce.exports);function Me(e){return new Promise(function(t,n){Se(e,{success:t,error:n})})}function Ne(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,k.call(this,this.media,e?"play":"pause"))}var Le={setup:function(){var e=this;L(this.elements.wrapper,this.config.classNames.embed,!0),Le.setAspectRatio.call(this),m.object(window.Vimeo)?Le.ready.call(this):Me(this.config.urls.vimeo.sdk).then(function(){Le.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=a((m.string(e)?e:this.config.ratio).split(":").map(Number),2),n=100/t[0]*t[1];if(Le.padding=n,this.elements.wrapper.style.paddingBottom="".concat(n,"%"),this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-".concat(i,"%)")}},ready:function(){var e=this,t=this,n=de({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");m.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var s,o=(s=i,m.empty(s)?null:m.number(Number(s))?s:s.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:s),r=A("iframe"),l=Q(t.config.urls.vimeo.iframe,o,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var c=A("div",{poster:t.poster,class:t.config.classNames.embedContainer});c.appendChild(r),t.media=S(c,t.media),ie(Q(t.config.urls.vimeo.api,o),"json").then(function(e){if(!m.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname="".concat(n.pathname.split("_")[0],".jpg"),Ee.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Ne.call(t,!0),t.embed.play()},t.media.pause=function(){return Ne.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var n=t.embed,i=t.media,a=t.paused,s=t.volume,o=a&&!n.hasPlayed;i.seeking=!0,k.call(t,i,"seeking"),Promise.resolve(o&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return o&&n.pause()}).then(function(){return o&&n.setVolume(s)}).catch(function(){})}});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,k.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&ce.setSpeedMenu.call(t,[])})}});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,k.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var n=!!m.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){p=n,k.call(t,t.media,"volumechange")})}});var f,g=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return g},set:function(e){var n=m.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){g=n})}}),t.embed.getVideoUrl().then(function(e){f=e,ce.setDownloadLink.call(t)}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return f}}),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,i,a;Le.ratio=(n=t[0],i=t[1],a=function e(t,n){return 0===n?t:e(n,t%n)}(n,i),"".concat(n/a,":").concat(i/a)),Le.setAspectRatio.call(e,Le.ratio)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Ee.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,k.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,k.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,he.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});he.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Ne.call(t,!e),e||k.call(t,t.media,"playing")}),m.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Ne.call(t,!0),k.call(t,t.media,"playing")}),t.embed.on("pause",function(){Ne.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,k.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,k.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&k.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,k.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,k.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,k.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,k.call(t,t.media,"error")}),t.on("enterfullscreen exitfullscreen",function(e){var n=t.fullscreen.target;if(n===t.elements.container){var i="enterfullscreen"===e.type,s=a(Le.ratio.split(":").map(Number),2),o=s[0]>s[1]?"width":"height";n.style[o]=i?"".concat(Le.padding,"%"):null}}),setTimeout(function(){return Ee.build.call(t)},0)}};function xe(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,k.call(this,this.media,e?"play":"pause"))}var Ie,_e={setup:function(){var e=this;L(this.elements.wrapper,this.config.classNames.embed,!0),_e.setAspectRatio.call(this),m.object(window.YT)&&m.function(window.YT.Player)?_e.ready.call(this):(Me(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){_e.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(m.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(m.empty(n))return this.config.title=n,void Ee.setTitle.call(this)}var i=this.config.keys.google;m.string(i)&&!m.empty(i)&&ie(Q(this.config.urls.youtube.api,e,i)).then(function(e){m.object(e)&&(t.config.title=e.items[0].snippet.title,Ee.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom="".concat(100/e[0]*e[1],"%")},ready:function(){var e=this,t=e.media.getAttribute("id");if(m.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");m.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,a,s=(i=n,m.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),o=(a=e.provider,"".concat(a,"-").concat(Math.floor(1e4*Math.random()))),r=A("div",{id:o,poster:e.poster});e.media=S(r,e.media);var l=function(e){return"https://img.youtube.com/vi/".concat(s,"/").concat(e,"default.jpg")};Ae(l("maxres"),121).catch(function(){return Ae(l("sd"),121)}).catch(function(){return Ae(l("hq"))}).then(function(t){return Ee.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(o,{videoId:s,playerVars:{autoplay:e.config.autoplay?1:0,hl:e.config.hl,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(!e.media.error){var n=t.data,i={2:"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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},k.call(e,e.media,"error")}},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),k.call(e,e.media,"ratechange")},onReady:function(t){if(!m.function(e.media.play)){var n=t.target;_e.getTitle.call(e,s),e.media.play=function(){xe.call(e,!0),n.playVideo()},e.media.pause=function(){xe.call(e,!1),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.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,k.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),k.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var i=m.boolean(t)?t:a;a=i,n[i?"mute":"unMute"](),k.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),k.call(e,e.media,"timeupdate"),k.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&k.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),k.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Ee.build.call(e)},50)}},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,k.call(e,e.media,"seeked")),t.data){case-1:k.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),k.call(e,e.media,"progress");break;case 0:xe.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):k.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(xe.call(e,!0),k.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){k.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),k.call(e,e.media,"durationchange")));break;case 2:e.muted||e.embed.unMute(),xe.call(e,!1)}k.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},je={setup:function(){this.media?(L(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),L(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&L(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=A("div",{class:this.config.classNames.video}),w(this.media,this.elements.wrapper),this.elements.poster=A("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?K.extend.call(this):this.isYouTube?_e.setup.call(this):this.isVimeo&&Le.setup.call(this)):this.debug.warn("No media element found!")}},Oe=function(){function t(n){var i=this;e(this,t),this.player=n,this.publisherId=n.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return n(t,[{key:"load",value:function(){var e=this;this.enabled&&(m.object(window.google)&&m.object(window.google.ima)?this.ready():Me(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=A("div",{class:this.player.config.classNames.ads}),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=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=le(Math.max(e.manager.getRemainingTime(),0)),n="".concat(te("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),m.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(m.element(n)){var i=100/t.player.duration*e,a=A("span",{class:t.player.config.classNames.cues});a.style.left="".concat(i.toString(),"%"),n.appendChild(a)}}}),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.trigger("loaded")}}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),a=function(e){var n="ads".concat(e.replace(/_/g,"").toLowerCase());k.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),a(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:a(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:a(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:a(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:a(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e,t=this,n=this.player.elements.container;this.player.on("ended",function(){t.loader.contentComplete()}),this.player.on("seeking",function(){return e=t.player.currentTime}),this.player.on("seeked",function(){var n=t.player.currentTime;m.empty(t.cuePoints)||t.cuePoints.forEach(function(i,a){e<i&&i<n&&(t.manager.discardAdBreak(),t.cuePoints.splice(a,1))})}),window.addEventListener("resize",function(){t.manager&&t.manager.resize(n.offsetWidth,n.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),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)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("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("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=new Array(n>1?n-1:0),a=1;a<n;a++)i[a-1]=arguments[a];var s=this.events[e];m.array(s)&&s.forEach(function(e){m.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return m.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: ".concat(t)),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){m.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: ".concat(e)),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!m.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"".concat("https://go.aniview.com/api/adserver6/vast/","?").concat(de(e))}}]),t}(),qe={insertElements:function(e,t){var n=this;m.string(t)?E(e,this.media,{src:t}):m.array(t)&&t.forEach(function(t){E(e,n.media,t)})},change:function(e){var t=this;Y(e,"sources.length")?(K.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],P(t.media),t.media=null,m.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,s=a(n,1)[0],o=s.provider,r=void 0===o?ge.html5:o,l=s.src,c="html5"===r?i:"div",u="html5"===r?{}:{src:l};Object.assign(t,{provider:r,type:i,supported:W.check(i,r,t.config.playsinline),media:A(c,u)}),t.elements.container.appendChild(t.media),m.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),m.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),Ee.addStyleHook.call(t),t.isHTML5&&qe.insertElements.call(t,"source",n),t.config.title=e.title,je.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&qe.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Ee.build.call(t),t.isHTML5&&t.media.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Re=function(){function t(n,i){var a=this;if(e(this,t),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=W.touch,this.media=n,m.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||m.nodeList(this.media)||m.array(this.media))&&(this.media=this.media[0]),this.config=J({},pe,t.defaults,i||{},function(){try{return JSON.parse(a.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new be(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",W),!m.nullOrUndefined(this.media)&&m.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(W.check().api){var s=this.media.cloneNode(!0);s.autoplay=!1,this.elements.original=s;var o=this.media.tagName.toLowerCase(),r=null,l=null;switch(o){case"div":if(r=this.media.querySelector("iframe"),m.element(r)){if(l=ue(r.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?ge.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?ge.vimeo:null}(l.toString()),this.elements.container=this.media,this.media=r,this.elements.container.className="",l.search.length){var c=["1","true"];c.includes(l.searchParams.get("autoplay"))&&(this.config.autoplay=!0),c.includes(l.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=c.includes(l.searchParams.get("playsinline")),this.config.hl=l.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(m.empty(this.provider)||!Object.keys(ge).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=ye.video;break;case"video":case"audio":this.type=o,this.provider=ge.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!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=W.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new Pe(this),this.storage=new ne(this),this.media.plyr=this,m.element(this.elements.container)||(this.elements.container=A("div"),w(this.media,this.elements.container)),Ee.addStyleHook.call(this),je.setup.call(this),this.config.debug&&y.call(this,this.elements.container,this.config.events.join(" "),function(e){a.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Ee.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new Te(this),this.config.ads.enabled&&(this.ads=new Oe(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0):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 n(t,[{key:"play",value:function(){return m.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&m.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(m.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):m.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(m.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(m.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(m.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){he.toggle.call(this,e,!1)}},{key:"airplay",value:function(){W.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=x(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=L(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!m.empty(this.config.settings)&&ce.toggleMenu.call(this,!1),i!==t){var a=i?"controlshidden":"controlsshown";k.call(this,this.media,a)}return!i}return!1}},{key:"on",value:function(e,t){y.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){b.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){v(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(P(t.elements.buttons.play),P(t.elements.captions),P(t.elements.controls),P(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),m.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,a=e.options;t.removeEventListener(n,i,a)}),this.eventListeners=[])}.call(t),S(t.elements.original,t.elements.container),k.call(t,t.elements.original,"destroyed",!0),m.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),Ee.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&m.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return W.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===ge.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===ge.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===ge.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===ye.video)}},{key:"isAudio",get:function(){return Boolean(this.type===ye.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=m.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return m.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=m.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;m.string(t)&&(t=Number(t)),m.number(t)||(t=this.storage.get("volume")),m.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!m.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;m.boolean(t)||(t=this.storage.get("muted")),m.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;m.number(e)&&(t=e),m.number(t)||(t=this.storage.get("speed")),m.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!m.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(m.number),a=!0;if(!n.includes(i)){var s=function(e,t){return m.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: ".concat(i,", using ").concat(s," instead")),i=s,a=!1}t.selected=i,this.media.quality=i,a&&this.storage.set({quality:i})}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=m.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){qe.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"download",get:function(){var e=this.config.urls.download;return m.url(e)?e:this.source}},{key:"poster",set:function(e){this.isVideo?Ee.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=m.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){he.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){he.setLanguage.call(this,e,!1)},get:function(){return(he.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){if(W.pip){var t=m.boolean(e)?e:!this.pip;m.function(this.media.webkitSetPresentationMode)&&this.media.webkitSetPresentationMode(t?me:fe),m.function(this.media.requestPictureInPicture)&&(!this.pip&&t?this.media.requestPictureInPicture():this.pip&&!t&&document.exitPictureInPicture())}},get:function(){return W.pip?m.empty(this.media.webkitPresentationMode)?this.media===document.pictureInPictureElement:this.media.webkitPresentationMode===me:null}}],[{key:"supported",value:function(e,t,n){return W.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return ae(e,t)}},{key:"setup",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return m.string(e)?i=Array.from(document.querySelectorAll(e)):m.nodeList(e)?i=Array.from(e):m.array(e)&&(i=e.filter(m.element)),m.empty(i)?null:i.map(function(e){return new t(e,n)})}}]),t}();return Re.defaults=(Ie=pe,JSON.parse(JSON.stringify(Ie))),Re});
+"object"==typeof navigator&&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";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(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)}}function n(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,a=!1,s=void 0;try{for(var o,r=e[Symbol.iterator]();!(i=(o=r.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){a=!0,s=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var o=function(e){return null!=e?e.constructor:null},r=function(e,t){return Boolean(e&&t&&e instanceof t)},l=function(e){return null==e},c=function(e){return o(e)===Object},u=function(e){return o(e)===String},d=function(e){return Array.isArray(e)},h=function(e){return r(e,NodeList)},p=function(e){return l(e)||(u(e)||d(e)||h(e))&&!e.length||c(e)&&!Object.keys(e).length},m={nullOrUndefined:l,object:c,number:function(e){return o(e)===Number&&!Number.isNaN(e)},string:u,boolean:function(e){return o(e)===Boolean},function:function(e){return o(e)===Function},array:d,weakMap:function(e){return r(e,WeakMap)},nodeList:h,element:function(e){return r(e,Element)},textNode:function(e){return o(e)===Text},event:function(e){return r(e,Event)},keyboardEvent:function(e){return r(e,KeyboardEvent)},cue:function(e){return r(e,window.TextTrackCue)||r(e,window.VTTCue)},track:function(e){return r(e,TextTrack)||!l(e)&&u(e.kind)},url:function(e){if(r(e,window.URL))return!0;if(!u(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!p(new URL(t).hostname)}catch(e){return!1}},empty:p},f=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function g(e,t,n){var i=this,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!m.empty(t)&&m.function(n)){var r=t.split(" "),l=o;f&&(l={passive:s,capture:o}),r.forEach(function(t){i&&i.eventListeners&&a&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[a?"addEventListener":"removeEventListener"](t,n,l)})}}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,n,!0,i,a)}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,n,!1,i,a)}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];g.call(this,e,t,function s(){v(e,t,s,i,a);for(var o=arguments.length,r=new Array(o),l=0;l<o;l++)r[l]=arguments[l];n.apply(this,r)},!0,i,a)}function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(m.element(e)&&!m.empty(t)){var a=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(a)}}function w(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,a=e.parentNode,s=e.nextSibling;i.appendChild(e),s?a.insertBefore(i,s):a.appendChild(i)})}function T(e,t){m.element(e)&&!m.empty(t)&&Object.entries(t).filter(function(e){var t=a(e,2)[1];return!m.nullOrUndefined(t)}).forEach(function(t){var n=a(t,2),i=n[0],s=n[1];return e.setAttribute(i,s)})}function A(e,t,n){var i=document.createElement(e);return m.object(t)&&T(i,t),m.string(n)&&(i.innerText=n),i}function E(e,t,n,i){m.element(t)&&t.appendChild(A(e,n,i))}function P(e){m.nodeList(e)||m.array(e)?Array.from(e).forEach(P):m.element(e)&&m.element(e.parentNode)&&e.parentNode.removeChild(e)}function C(e){if(m.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function S(e,t){return m.element(t)&&m.element(t.parentNode)&&m.element(e)?(t.parentNode.replaceChild(e,t),e):null}function M(e,t){if(!m.string(e)||m.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),a=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),o=s[0],r=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":m.object(i)&&m.string(i.class)&&(i.class+=" ".concat(a)),n.class=a;break;case"#":n.id=t.replace("#","");break;case"[":n[o]=r}}),n}function N(e,t){if(m.element(e)){var n=t;m.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function L(e,t,n){if(m.nodeList(e))return Array.from(e).map(function(e){return L(e,t,n)});if(m.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function x(e,t){return m.element(e)&&e.classList.contains(t)}function I(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function _(e){return this.elements.container.querySelectorAll(e)}function j(e){return this.elements.container.querySelector(e)}function O(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];m.element(e)&&(e.focus({preventScroll:!0}),t&&L(e,this.config.classNames.tabFocus))}var q,R,B,D=(q=document.createElement("span"),R={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},B=Object.keys(R).find(function(e){return void 0!==q.style[e]}),!!m.string(B)&&R[B]);function H(e){setTimeout(function(){try{N(e,!0),e.offsetHeight,N(e,!1)}catch(e){}},0)}var V,F={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)},U={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},W={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=F.isIPhone&&n&&W.playsinline,a=W[e]||"html5"!==t;return{api:a,ui:a&&W.rangeInput&&("video"!==e||!F.isIPhone||i)}},pip:!(F.isIPhone||!m.function(A("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||A("video").disablePictureInPicture)),airplay:m.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=a(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(U).includes(n)&&(n+='; codecs="'.concat(U[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(V=document.createElement("input"),V.type="range","range"===V.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==D,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},K={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return W.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return K.getSources.call(this).map(function(e){return Number(e.getAttribute("data-size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=K.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("data-res"))},set:function(t){var n=K.getSources.call(e).find(function(e){return Number(e.getAttribute("data-res"))===t});if(n){var i=e.media,a=i.currentTime,s=i.paused,o=i.preload,r=i.readyState;e.media.src=n.getAttribute("src"),("none"!==o||r)&&(e.once("loadedmetadata",function(){e.currentTime=a,s||e.play()}),e.media.load()),k.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(P(K.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function z(e){return m.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Y(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function J(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];if(!n.length)return e;var s=n.shift();return m.object(s)?(Object.keys(s).forEach(function(t){m.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,i({},t,{})),J(e[t],s[t])):Object.assign(e,i({},t,s[t]))}),J.apply(void 0,[e].concat(n))):e}function Q(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return m.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function $(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function G(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function X(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=$(e,"-"," "),e=$(e,"_"," "),$(e=G(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Z(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var ee={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},te=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(m.empty(e)||m.empty(t))return"";var n=Y(t.i18n,e);if(m.empty(n))return Object.keys(ee).includes(e)?ee[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=a(e,2),i=t[0],s=t[1];n=$(n,i,s)}),n},ne=function(){function t(n){e(this,t),this.enabled=n.config.storage.enabled,this.key=n.config.storage.key}return n(t,[{key:"get",value:function(e){if(!t.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(m.empty(n))return null;var i=JSON.parse(n);return m.string(e)&&e.length?i[e]:i}},{key:"set",value:function(e){if(t.supported&&this.enabled&&m.object(e)){var n=this.get();m.empty(n)&&(n={}),J(n,e),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),t}();function ie(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var a=new XMLHttpRequest;if(!("withCredentials"in a))return;a.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(a.responseText))}catch(e){n(a.responseText)}else n(a.response)}),a.addEventListener("error",function(){throw new Error(a.status)}),a.open("GET",e,!0),a.responseType=t,a.send()}catch(e){i(e)}})}function ae(e,t){if(m.string(e)){var n=m.string(t),i=function(){return null!==document.getElementById(t)},a=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var s=ne.supported,o=document.createElement("div");if(o.setAttribute("hidden",""),n&&o.setAttribute("id",t),s){var r=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==r){var l=JSON.parse(r);a(o,l.content)}}ie(e).then(function(e){m.empty(e)||(s&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),a(o,e))}).catch(function(){})}}}var se=function(e){return parseInt(e/60/60%60,10)},oe=function(e){return parseInt(e/60%60,10)},re=function(e){return parseInt(e%60,10)};function le(){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(!m.number(e))return le(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},a=se(e),s=oe(e),o=re(e);return a=t||a>0?"".concat(a,":"):"","".concat(n&&e>0?"-":"").concat(a).concat(i(s),":").concat(i(o))}var ce={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||F.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=j.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:_.call(this,this.config.selectors.buttons.play),pause:j.call(this,this.config.selectors.buttons.pause),restart:j.call(this,this.config.selectors.buttons.restart),rewind:j.call(this,this.config.selectors.buttons.rewind),fastForward:j.call(this,this.config.selectors.buttons.fastForward),mute:j.call(this,this.config.selectors.buttons.mute),pip:j.call(this,this.config.selectors.buttons.pip),airplay:j.call(this,this.config.selectors.buttons.airplay),settings:j.call(this,this.config.selectors.buttons.settings),captions:j.call(this,this.config.selectors.buttons.captions),fullscreen:j.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=j.call(this,this.config.selectors.progress),this.elements.inputs={seek:j.call(this,this.config.selectors.inputs.seek),volume:j.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:j.call(this,this.config.selectors.display.buffer),currentTime:j.call(this,this.config.selectors.display.currentTime),duration:j.call(this,this.config.selectors.display.duration)},m.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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}},createIcon:function(e,t){var n=ce.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),a=document.createElementNS("http://www.w3.org/2000/svg","svg");T(a,J(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),o="".concat(i,"-").concat(e);return"href"in s&&s.setAttributeNS("http://www.w3.org/1999/xlink","href",o),s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),a.appendChild(s),a},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=te(e,this.config);return A("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(m.empty(e))return null;var t=A("span",{class:this.config.classNames.menu.value});return t.appendChild(A("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=X(e),a={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(a[e]=n[e],delete n[e])}),"button"!==a.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":a.toggle=!0,a.label="play",a.labelPressed="pause",a.icon="play",a.iconPressed="pause";break;case"mute":a.toggle=!0,a.label="mute",a.labelPressed="unmute",a.icon="volume",a.iconPressed="muted";break;case"captions":a.toggle=!0,a.label="enableCaptions",a.labelPressed="disableCaptions",a.icon="captions-off",a.iconPressed="captions-on";break;case"fullscreen":a.toggle=!0,a.label="enterFullscreen",a.labelPressed="exitFullscreen",a.icon="enter-fullscreen",a.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",a.label="play",a.icon="play";break;default:m.empty(a.label)&&(a.label=i),m.empty(a.icon)&&(a.icon=e)}var s=A(a.element);return a.toggle?(s.appendChild(ce.createIcon.call(this,a.iconPressed,{class:"icon--pressed"})),s.appendChild(ce.createIcon.call(this,a.icon,{class:"icon--not-pressed"})),s.appendChild(ce.createLabel.call(this,a.labelPressed,{class:"label--pressed"})),s.appendChild(ce.createLabel.call(this,a.label,{class:"label--not-pressed"}))):(s.appendChild(ce.createIcon.call(this,a.icon)),s.appendChild(ce.createLabel.call(this,a.label))),J(n,M(this.config.selectors.buttons[i],n)),T(s,n),"play"===i?(m.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(s)):this.elements.buttons[i]=s,s},createRange:function(e,t){var n=A("input",J(M(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":te(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,ce.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=A("progress",J(M(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(A("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],a=i?te(i,this.config):"";n.innerText="% ".concat(a.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=M(this.config.selectors.display[e]),n=A("div",J(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":te(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;y(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var a,s=I(e,'[role="menuitemradio"]');if(!s&&[32,39].includes(i.which))ce.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||s&&39===i.which?(a=e.nextElementSibling,m.element(a)||(a=e.parentNode.firstElementChild)):(a=e.previousElementSibling,m.element(a)||(a=e.parentNode.lastElementChild)),O.call(n,a,!0))}},!1),y(e,"keyup",function(e){13===e.which&&ce.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,a=e.type,s=e.title,o=e.badge,r=void 0===o?null:o,l=e.checked,c=void 0!==l&&l,u=M(this.config.selectors.inputs[a]),d=A("button",J(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=A("span");h.innerHTML=s,m.element(r)&&h.appendChild(r),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return I(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!m.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,a){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}ce.showMenuPanel.call(t,"home",m.keyboardEvent(e))}},a,!1),ce.bindMenuItemShortcuts.call(this,d,a),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return m.number(e)?le(e,se(this.duration)>0,t):e},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];m.element(e)&&m.number(t)&&(e.innerText=ce.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(m.element(this.elements.inputs.volume)&&ce.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),m.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;m.element(e)&&(e.value=t,ce.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&m.event(e)){var n,i,a=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,a=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&ce.setRange.call(this,this.elements.inputs.seek,a);break;case"playing":case"progress":!function(e,n){var i=m.number(n)?n:0,a=m.element(e)?e:t.elements.display.buffer;if(m.element(a)){a.value=i;var s=a.getElementsByTagName("span")[0];m.element(s)&&(s.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=m.event(e)?e.target:e;if(m.element(t)&&"range"===t.getAttribute("type")){if(I(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=ce.formatTime(this.currentTime),i=ce.formatTime(this.duration),a=te("seekLabel",this.config);t.setAttribute("aria-valuetext",a.replace("{currentTime}",n).replace("{duration}",i))}else if(I(t,this.config.selectors.inputs.volume)){var s=100*t.value;t.setAttribute("aria-valuenow",s),t.setAttribute("aria-valuetext","".concat(s.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);F.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&m.element(this.elements.inputs.seek)&&m.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),a="".concat(this.config.classNames.tooltip,"--visible"),s=function(e){L(t.elements.display.seekTooltip,a,e)};if(this.touch)s(!1);else{if(m.event(e))n=100/i.width*(e.pageX-i.left);else{if(!x(this.elements.display.seekTooltip,a))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ce.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),m.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!m.element(this.elements.display.duration)&&this.config.invertTime;ce.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ce.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return N(this.elements.display.currentTime,!0),void N(this.elements.progress,!0);m.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=m.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ce.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ce.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),ce.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){N(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],a=null,s=t;if("captions"===e)a=this.currentTrack;else{if(a=m.empty(n)?this[e]:n,m.empty(a)&&(a=this.config[e].default),!m.empty(this.options[e])&&!this.options[e].includes(a))return void this.debug.warn("Unsupported value of '".concat(a,"' for ").concat(e));if(!this.config[e].options.includes(a))return void this.debug.warn("Disabled value of '".concat(a,"' for ").concat(e))}if(m.element(s)||(s=i&&i.querySelector('[role="menu"]')),m.element(s)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=ce.getLabel.call(this,e,a);var o=s&&s.querySelector('[value="'.concat(a,'"]'));m.element(o)&&(o.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?te("normal",this.config):"".concat(t,"&times;");case"quality":if(m.number(t)){var n=te("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return G(t);case"captions":return he.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(m.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');m.array(e)&&(this.options.quality=z(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!m.empty(this.options.quality)&&this.options.quality.length>1;if(ce.toggleMenuButton.call(this,"quality",i),C(n),ce.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){ce.createMenuItem.call(t,{value:e,list:n,type:"quality",title:ce.getLabel.call(t,"quality",e),badge:function(e){var n=te("qualityBadge.".concat(e),t.config);return n.length?ce.createBadge.call(t,n):null}(e)})}),ce.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(m.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=he.getTracks.call(this),i=Boolean(n.length);if(ce.toggleMenuButton.call(this,"captions",i),C(t),ce.checkMenu.call(this),i){var a=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:he.getLabel.call(e,n),badge:n.language&&ce.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});a.unshift({value:-1,checked:!this.captions.toggled,title:te("disabled",this.config),list:t,type:"language"}),a.forEach(ce.createMenuItem.bind(this)),ce.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(m.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');m.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!m.empty(this.options.speed)&&this.options.speed.length>1;ce.toggleMenuButton.call(this,"speed",i),C(n),ce.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){ce.createMenuItem.call(t,{value:e,list:n,type:"speed",title:ce.getLabel.call(t,"speed",e)})}),ce.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!m.empty(e)&&Object.values(e).some(function(e){return!e.hidden});N(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;m.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');O.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(m.element(t)&&m.element(n)){var i=t.hidden,a=i;if(m.boolean(e))a=e;else if(m.keyboardEvent(e)&&27===e.which)a=!1;else if(m.event(e)){var s=t.contains(e.target);if(s||!s&&e.target!==n&&a)return}n.setAttribute("aria-expanded",a),N(t,!a),L(this.elements.container,this.config.classNames.menu.open,a),a&&m.keyboardEvent(e)?ce.focusFirstMenuItem.call(this,null,!0):a||i||O.call(this,n,m.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return P(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(m.element(i)){var a=i.parentNode,s=Array.from(a.children).find(function(e){return!e.hidden});if(W.transitions&&!W.reducedMotion){a.style.width="".concat(s.scrollWidth,"px"),a.style.height="".concat(s.scrollHeight,"px");var o=ce.getMenuSize.call(this,i);y.call(this,a,D,function t(n){n.target===a&&["width","height"].includes(n.propertyName)&&(a.style.width="",a.style.height="",v.call(e,a,D,t))}),a.style.width="".concat(o.width,"px"),a.style.height="".concat(o.height,"px")}N(s,!0),N(i,!1),ce.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;m.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=A("div",M(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(ce.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(ce.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(ce.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(ce.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=A("div",M(this.config.selectors.progress));if(i.appendChild(ce.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(ce.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=A("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(ce.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(ce.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var s=A("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&s.appendChild(ce.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o={max:1,step:.05,value:this.config.volume};s.appendChild(ce.createRange.call(this,"volume",J(o,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=s}n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(ce.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!m.empty(this.config.settings)){var r=A("div",{class:"plyr__menu",hidden:""});r.appendChild(ce.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=A("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=A("div"),u=A("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=A("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=A("button",J(M(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));ce.bindMenuItemShortcuts.call(t,i,n),y(i,"click",function(){ce.showMenuPanel.call(t,n,!1)});var a=A("span",null,te(n,t.config)),s=A("span",{class:t.config.classNames.menu.value});s.innerHTML=e[n],a.appendChild(s),i.appendChild(a),d.appendChild(i);var o=A("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),r=A("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});r.appendChild(A("span",{"aria-hidden":!0},te(n,t.config))),r.appendChild(A("span",{class:t.config.classNames.hidden},te("menuBack",t.config))),y(o,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),ce.showMenuPanel.call(t,"home",!0))},!1),y(r,"click",function(){ce.showMenuPanel.call(t,"home",!1)}),o.appendChild(r),o.appendChild(A("div",{role:"menu"})),c.appendChild(o),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=o}),l.appendChild(c),r.appendChild(l),n.appendChild(r),this.elements.settings.popup=l,this.elements.settings.menu=r}if(this.config.controls.includes("pip")&&W.pip&&n.appendChild(ce.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&W.airplay&&n.appendChild(ce.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!m.url(p)&&this.isEmbed&&J(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(ce.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(ce.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(ce.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&ce.setQualityMenu.call(this,K.getQualityOptions.call(this)),ce.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=ce.getIconUrl.call(this);t.cors&&ae(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;m.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),m.element(this.config.controls)||m.string(this.config.controls)?n=this.config.controls:(n=ce.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:he.getLabel.call(this)}),s=!1);var o,r=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=a(e,2),i=n[0],s=n[1];t=$(t,"{".concat(i,"}"),s)}),t};if(s&&(m.string(this.config.controls)?n=r(n):m.element(n)&&(n.innerHTML=r(n.innerHTML))),m.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),m.element(o)||(o=this.elements.container),o[m.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),m.element(this.elements.controls)||ce.findElements.call(this),!m.empty(this.elements.buttons)){var l=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return x(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];L(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){m.array(e)||m.nodeList(e)?Array.from(e).filter(Boolean).forEach(l):l(e)})}if(window.navigator.userAgent.includes("Edge")&&H(o),this.config.tooltips.controls){var c=this.config,u=c.classNames,d=c.selectors,h="".concat(d.controls.wrapper," ").concat(d.labels," .").concat(u.hidden),p=_.call(this,h);Array.from(p).forEach(function(t){L(t,e.config.classNames.hidden,!1),L(t,e.config.classNames.tooltip,!0)})}}};function ue(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function de(e){var t=new URLSearchParams;return m.object(e)&&Object.entries(e).forEach(function(e){var n=a(e,2),i=n[0],s=n[1];t.set(i,s)}),t}var he={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!W.textTracks)m.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ce.setCaptionsMenu.call(this);else{var e,t;if(m.element(this.elements.captions)||(this.elements.captions=A("div",M(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,m.element(e)&&m.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),F.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=ue(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&ie(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){P(e)})})}var i=z((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),s=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===s)s=a(i,1)[0];var o=this.storage.get("captions");if(m.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:s,languages:i}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";y.call(this,this.media.textTracks,r,he.update.bind(this))}setTimeout(he.update.bind(this),0)}},update:function(){var e=this,t=he.getTracks.call(this,!0),n=this.captions,i=n.active,a=n.language,s=n.meta,o=n.currentTrackNode,r=Boolean(t.find(function(e){return e.language===a}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!s.get(e)}).forEach(function(t){e.debug.log("Track added",t),s.set(t,{default:"showing"===t.mode}),t.mode="hidden",y.call(e,t,"cuechange",function(){return he.updateCues.call(e)})}),(r&&this.language!==a||!t.includes(o))&&(he.setLanguage.call(this,a),he.toggle.call(this,i&&r)),L(this.elements.container,this.config.classNames.captions.enabled,!m.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&ce.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,a=m.nullOrUndefined(e)?!n:e;if(a!==n){if(t||(this.captions.active=a,this.storage.set({captions:a})),!this.language&&a&&!t){var o=he.getTracks.call(this),r=he.findTrack.call(this,[this.captions.language].concat(s(this.captions.languages)),!0);return this.captions.language=r.language,void he.set.call(this,o.indexOf(r))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=a),L(this.elements.container,i,a),this.captions.toggled=a,ce.updateSetting.call(this,"captions"),k.call(this,this.media,a?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=he.getTracks.call(this);if(-1!==e)if(m.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],a=(i||{}).language;this.captions.currentTrackNode=i,ce.updateSetting.call(this,"captions"),t||(this.captions.language=a,this.storage.set({language:a})),this.isVimeo&&this.embed.enableTextTrack(a),k.call(this,this.media,"languagechange")}he.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&he.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else he.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(m.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=he.getTracks.call(this),a=he.findTrack.call(this,[n]);he.set.call(this,i.indexOf(a),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=he.getTracks.call(this),s=function(e){return Number((n.captions.meta.get(e)||{}).default)},o=Array.from(a).sort(function(e,t){return s(t)-s(e)});return e.every(function(e){return!(t=o.find(function(t){return t.language===e}))}),t||(i?o[0]:void 0)},getCurrentTrack:function(){return he.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!m.track(t)&&W.textTracks&&this.captions.toggled&&(t=he.getCurrentTrack.call(this)),m.track(t)?m.empty(t.label)?m.empty(t.language)?te("enabled",this.config):e.language.toUpperCase():t.label:te("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(m.element(this.elements.captions))if(m.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=he.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Z)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){C(this.elements.captions);var a=A("span",M(this.config.selectors.caption));a.innerHTML=i,this.elements.captions.appendChild(a),k.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},pe={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.4.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","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"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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,publisherId:""}},me="picture-in-picture",fe="inline",ge={html5:"html5",youtube:"youtube",vimeo:"vimeo"},ye={audio:"audio",video:"video"};var ve=function(){},be=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e(this,t),this.enabled=window.console&&n,this.enabled&&this.log("Debugging enabled")}return n(t,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ve}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ve}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ve}}]),t}();function ke(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;m.element(e)&&(e.pressed=this.active),k.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),F.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(m.element(e)){var n=_.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],a=n[n.length-1];g.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==a||e.shiftKey?t===i&&e.shiftKey&&(a.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function we(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",L(this.target,this.player.config.classNames.fullscreen.fallback,t),F.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var a=m.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!a,a||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return H(e.target)},100)}ke.call(this)}var Te=function(){function t(n){var i=this;e(this,t),this.player=n,this.prefix=t.prefix,this.property=t.property,this.scrollPosition={x:0,y:0},y.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){ke.call(i)}),y.call(this.player,this.player.elements.container,"dblclick",function(e){m.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return n(t,[{key:"update",value:function(){this.enabled?this.player.debug.log("".concat(t.native?"Native":"Fallback"," fullscreen enabled")):this.player.debug.log("Fullscreen not supported and fallback disabled"),L(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(F.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():t.native?this.prefix?m.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen():we.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(F.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(t.native)if(this.prefix){if(!m.empty(this.prefix)){var e="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(e).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else we.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(t.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(t.native?(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target:x(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return F.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(m.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!m.function(document["".concat(t,"ExitFullscreen")])&&!m.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),t}();function Ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var a=new Image,s=function(){delete a.onload,delete a.onerror,(a.naturalWidth>=t?n:i)(a)};Object.assign(a,{onload:s,onerror:s,src:e})})}var Ee={addStyleHook:function(){L(this.elements.container,this.config.selectors.container.replace(".",""),!0),L(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(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void Ee.toggleNativeControls.call(this,!0);m.element(this.elements.controls)||(ce.inject.call(this),this.listeners.controls()),Ee.toggleNativeControls.call(this),this.isHTML5&&he.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ce.updateVolume.call(this),ce.timeUpdate.call(this),Ee.checkPlaying.call(this),L(this.elements.container,this.config.classNames.pip.supported,W.pip&&this.isHTML5&&this.isVideo),L(this.elements.container,this.config.classNames.airplay.supported,W.airplay&&this.isHTML5),L(this.elements.container,this.config.classNames.isIos,F.isIos),L(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){k.call(e,e.media,"ready")},0),Ee.setTitle.call(this),this.poster&&Ee.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&ce.durationUpdate.call(this)},setTitle:function(){var e=te("play",this.config);if(m.string(this.config.title)&&!m.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=j.call(this,"iframe");if(!m.element(t))return;var n=m.empty(this.config.title)?"video":this.config.title,i=te("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){L(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):y.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return Ae(e)}).catch(function(n){throw e===t.poster&&Ee.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),Ee.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;L(this.elements.container,this.config.classNames.playing,this.playing),L(this.elements.container,this.config.classNames.paused,this.paused),L(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),m.event(e)&&"timeupdate"===e.type||Ee.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){L(t.elements.container,t.config.classNames.loading,t.loading),Ee.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}},Pe=function(){function t(n){e(this,t),this.player=n,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return n(t,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,a="keydown"===e.type,s=a&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&m.number(i)){if(a){var o=document.activeElement;if(m.element(o)){var r=t.config.selectors.editable;if(o!==n.inputs.seek&&I(o,r))return;if(32===e.which&&I(o,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:s||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:s||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:s||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===i&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){ce.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,L(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,a=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||a)i=t.config.classNames.tabFocus,L(_.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&L(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&g.call(t,window,"keydown keyup",this.handleKey,e,!1),g.call(t,document.body,"click",this.toggleMenu,e),b.call(t,document.body,"touchstart",this.firstTouch),g.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.elements;!e.config.keyboard.global&&e.config.keyboard.focused&&y.call(e,t.container,"keydown keyup",this.handleKey,!1),y.call(e,t.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(n){var i=t.controls;i&&"enterfullscreen"===n.type&&(i.pressed=!1,i.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(n.type)&&(Ee.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return Ee.toggleControls.call(e,!1)},a)})}},{key:"media",value:function(){var e=this.player,t=e.elements;if(y.call(e,e.media,"timeupdate seeking seeked",function(t){return ce.timeUpdate.call(e,t)}),y.call(e,e.media,"durationchange loadeddata loadedmetadata",function(t){return ce.durationUpdate.call(e,t)}),y.call(e,e.media,"canplay loadeddata",function(){N(t.volume,!e.hasAudio),N(t.buttons.mute,!e.hasAudio)}),y.call(e,e.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&e.restart()}),y.call(e,e.media,"progress playing seeking seeked",function(t){return ce.updateProgress.call(e,t)}),y.call(e,e.media,"volumechange",function(t){return ce.updateVolume.call(e,t)}),y.call(e,e.media,"playing play pause ended emptied timeupdate",function(t){return Ee.checkPlaying.call(e,t)}),y.call(e,e.media,"waiting canplay seeked playing",function(t){return Ee.checkLoading.call(e,t)}),y.call(e,e.media,"playing",function(){e.ads&&e.ads.enabled&&!e.ads.initialized&&e.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.play()})}),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){var n=j.call(e,".".concat(e.config.classNames.video));if(!m.element(n))return;y.call(e,t.container,"click",function(i){([t.container,n].includes(i.target)||n.contains(i.target))&&(e.touch&&e.config.hideControls||(e.ended?(e.restart(),e.play()):e.togglePlay()))})}e.supported.ui&&e.config.disableContextMenu&&y.call(e,t.wrapper,"contextmenu",function(e){e.preventDefault()},!1),y.call(e,e.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),y.call(e,e.media,"ratechange",function(){ce.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),y.call(e,e.media,"qualitychange",function(t){ce.updateSetting.call(e,"quality",null,t.detail.quality)}),y.call(e,e.media,"ready qualitychange",function(){ce.setDownloadLink.call(e)});var i=e.config.events.concat(["keyup","keydown"]).join(" ");y.call(e,e.media,i,function(n){var i=n.detail,a=void 0===i?{}:i;"error"===n.type&&(a=e.media.error),k.call(e,t.container,n.type,!0,a)})}},{key:"proxy",value:function(e,t,n){var i=this.player,a=i.config.listeners[n],s=!0;m.function(a)&&(s=a.call(i,e)),s&&m.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.player,r=o.config.listeners[i],l=m.function(r);y.call(o,e,t,function(e){return a.proxy(e,n,i)},s&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=F.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){k.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),ce.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),ce.toggleMenu.call(t,e)):ce.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&ce.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!m.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var a=n.hasAttribute("play-on-seeked"),s=["mouseup","touchend","keyup"].includes(e.type);a&&s?(n.removeAttribute("play-on-seeked"),t.play()):!s&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),F.isIos){var s=_.call(t,'input[type="range"]');Array.from(s).forEach(function(t){return e.bind(t,i,function(e){return H(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");m.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return ce.updateSeekTooltip.call(t,e)}),F.isWebkit&&Array.from(_.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return ce.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!m.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,ce.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,a=t.timers;L(i.controls,n.classNames.noTransition,!0),Ee.toggleControls.call(t,!0),setTimeout(function(){L(i.controls,n.classNames.noTransition,!1)},0);var s=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return Ee.toggleControls.call(t,!1)},s)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=a([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),s=i[0],o=i[1],r=Math.sign(Math.abs(s)>Math.abs(o)?s:o);t.increaseVolume(r/50);var l=t.media.volume;(1===r&&l<1||-1===r&&l>0)&&e.preventDefault()},"volume",!1)}}]),t}();"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce,Se=(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function a(e,t){if(e){var a=i[e];if(n[e]=t,a)for(;a.length;)a[0](e,t),a.splice(0,1)}}function s(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function o(t,n,i,a){var s,r,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");a=a||0,/(^css!|\.css$)/.test(t)?(s=!0,(r=l.createElement("link")).rel="stylesheet",r.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=l.createElement("img")).src=h:((r=l.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var l=e.type[0];if(s&&"hideFocus"in r)try{r.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(a+=1)<u)return o(t,n,i,a);n(t,l,e.defaultPrevented)},!1!==d(t,r)&&l.head.appendChild(r)}function r(e,n,i){var r,l;if(n&&n.trim&&(r=n),l=(r?i:n)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,n){var i,a,s=(e=e.push?e:[e]).length,r=s,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--s||t(l)},a=0;a<r;a++)o(e[a],i,n)}(e,function(e){s(l,e),a(r,e)},l)}return r.ready=function(e,t){return function(e,t){e=e.push?e:[e];var a,s,o,r=[],l=e.length,c=l;for(a=function(e,n){n.length&&r.push(e),--c||t(r)};l--;)s=e[l],(o=n[s])?a(s,o):(i[s]=i[s]||[]).push(a)}(e,function(e){s(t,e)}),r},r.done=function(e){a(e,[])},r.reset=function(){t={},n={},i={}},r.isDefined=function(e){return e in t},r}()}(Ce={exports:{}},Ce.exports),Ce.exports);function Me(e){return new Promise(function(t,n){Se(e,{success:t,error:n})})}function Ne(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,k.call(this,this.media,e?"play":"pause"))}var Le={setup:function(){var e=this;L(this.elements.wrapper,this.config.classNames.embed,!0),Le.setAspectRatio.call(this),m.object(window.Vimeo)?Le.ready.call(this):Me(this.config.urls.vimeo.sdk).then(function(){Le.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=a((m.string(e)?e:this.config.ratio).split(":").map(Number),2),n=100/t[0]*t[1];if(Le.padding=n,this.elements.wrapper.style.paddingBottom="".concat(n,"%"),this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-".concat(i,"%)")}},ready:function(){var e=this,t=this,n=de({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");m.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var s,o=(s=i,m.empty(s)?null:m.number(Number(s))?s:s.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:s),r=A("iframe"),l=Q(t.config.urls.vimeo.iframe,o,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var c=A("div",{poster:t.poster,class:t.config.classNames.embedContainer});c.appendChild(r),t.media=S(c,t.media),ie(Q(t.config.urls.vimeo.api,o),"json").then(function(e){if(!m.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname="".concat(n.pathname.split("_")[0],".jpg"),Ee.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Ne.call(t,!0),t.embed.play()},t.media.pause=function(){return Ne.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var n=t.embed,i=t.media,a=t.paused,s=t.volume,o=a&&!n.hasPlayed;i.seeking=!0,k.call(t,i,"seeking"),Promise.resolve(o&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return o&&n.pause()}).then(function(){return o&&n.setVolume(s)}).catch(function(){})}});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,k.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&ce.setSpeedMenu.call(t,[])})}});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,k.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var n=!!m.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){p=n,k.call(t,t.media,"volumechange")})}});var f,g=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return g},set:function(e){var n=m.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){g=n})}}),t.embed.getVideoUrl().then(function(e){f=e,ce.setDownloadLink.call(t)}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return f}}),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,i,a;Le.ratio=(n=t[0],i=t[1],a=function e(t,n){return 0===n?t:e(n,t%n)}(n,i),"".concat(n/a,":").concat(i/a)),Le.setAspectRatio.call(e,Le.ratio)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Ee.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,k.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,k.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,he.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});he.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Ne.call(t,!e),e||k.call(t,t.media,"playing")}),m.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Ne.call(t,!0),k.call(t,t.media,"playing")}),t.embed.on("pause",function(){Ne.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,k.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,k.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&k.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,k.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,k.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,k.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,k.call(t,t.media,"error")}),t.on("enterfullscreen exitfullscreen",function(e){var n=t.fullscreen.target;if(n===t.elements.container){var i="enterfullscreen"===e.type,s=a(Le.ratio.split(":").map(Number),2),o=s[0]>s[1]?"width":"height";n.style[o]=i?"".concat(Le.padding,"%"):null}}),setTimeout(function(){return Ee.build.call(t)},0)}};function xe(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,k.call(this,this.media,e?"play":"pause"))}var Ie,_e={setup:function(){var e=this;L(this.elements.wrapper,this.config.classNames.embed,!0),_e.setAspectRatio.call(this),m.object(window.YT)&&m.function(window.YT.Player)?_e.ready.call(this):(Me(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){_e.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(m.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(m.empty(n))return this.config.title=n,void Ee.setTitle.call(this)}var i=this.config.keys.google;m.string(i)&&!m.empty(i)&&ie(Q(this.config.urls.youtube.api,e,i)).then(function(e){m.object(e)&&(t.config.title=e.items[0].snippet.title,Ee.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom="".concat(100/e[0]*e[1],"%")},ready:function(){var e=this,t=e.media.getAttribute("id");if(m.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");m.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,a,s=(i=n,m.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),o=(a=e.provider,"".concat(a,"-").concat(Math.floor(1e4*Math.random()))),r=A("div",{id:o,poster:e.poster});e.media=S(r,e.media);var l=function(e){return"https://img.youtube.com/vi/".concat(s,"/").concat(e,"default.jpg")};Ae(l("maxres"),121).catch(function(){return Ae(l("sd"),121)}).catch(function(){return Ae(l("hq"))}).then(function(t){return Ee.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(o,{videoId:s,playerVars:{autoplay:e.config.autoplay?1:0,hl:e.config.hl,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(!e.media.error){var n=t.data,i={2:"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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},k.call(e,e.media,"error")}},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),k.call(e,e.media,"ratechange")},onReady:function(t){if(!m.function(e.media.play)){var n=t.target;_e.getTitle.call(e,s),e.media.play=function(){xe.call(e,!0),n.playVideo()},e.media.pause=function(){xe.call(e,!1),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.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,k.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),k.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var i=m.boolean(t)?t:a;a=i,n[i?"mute":"unMute"](),k.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),k.call(e,e.media,"timeupdate"),k.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&k.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),k.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Ee.build.call(e)},50)}},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,k.call(e,e.media,"seeked")),t.data){case-1:k.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),k.call(e,e.media,"progress");break;case 0:xe.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):k.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(xe.call(e,!0),k.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){k.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),k.call(e,e.media,"durationchange")));break;case 2:e.muted||e.embed.unMute(),xe.call(e,!1)}k.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},je={setup:function(){this.media?(L(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),L(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&L(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=A("div",{class:this.config.classNames.video}),w(this.media,this.elements.wrapper),this.elements.poster=A("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?K.extend.call(this):this.isYouTube?_e.setup.call(this):this.isVimeo&&Le.setup.call(this)):this.debug.warn("No media element found!")}},Oe=function(){function t(n){var i=this;e(this,t),this.player=n,this.publisherId=n.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return n(t,[{key:"load",value:function(){var e=this;this.enabled&&(m.object(window.google)&&m.object(window.google.ima)?this.ready():Me(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=A("div",{class:this.player.config.classNames.ads}),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=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=le(Math.max(e.manager.getRemainingTime(),0)),n="".concat(te("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),m.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(m.element(n)){var i=100/t.player.duration*e,a=A("span",{class:t.player.config.classNames.cues});a.style.left="".concat(i.toString(),"%"),n.appendChild(a)}}}),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.trigger("loaded")}}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),a=function(e){var n="ads".concat(e.replace(/_/g,"").toLowerCase());k.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),a(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:a(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:a(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:a(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:a(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e,t=this,n=this.player.elements.container;this.player.on("ended",function(){t.loader.contentComplete()}),this.player.on("seeking",function(){return e=t.player.currentTime}),this.player.on("seeked",function(){var n=t.player.currentTime;m.empty(t.cuePoints)||t.cuePoints.forEach(function(i,a){e<i&&i<n&&(t.manager.discardAdBreak(),t.cuePoints.splice(a,1))})}),window.addEventListener("resize",function(){t.manager&&t.manager.resize(n.offsetWidth,n.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),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)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("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("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=new Array(n>1?n-1:0),a=1;a<n;a++)i[a-1]=arguments[a];var s=this.events[e];m.array(s)&&s.forEach(function(e){m.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return m.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: ".concat(t)),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){m.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: ".concat(e)),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!m.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"".concat("https://go.aniview.com/api/adserver6/vast/","?").concat(de(e))}}]),t}(),qe={insertElements:function(e,t){var n=this;m.string(t)?E(e,this.media,{src:t}):m.array(t)&&t.forEach(function(t){E(e,n.media,t)})},change:function(e){var t=this;Y(e,"sources.length")?(K.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],P(t.media),t.media=null,m.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,s=a(n,1)[0],o=s.provider,r=void 0===o?ge.html5:o,l=s.src,c="html5"===r?i:"div",u="html5"===r?{}:{src:l};Object.assign(t,{provider:r,type:i,supported:W.check(i,r,t.config.playsinline),media:A(c,u)}),t.elements.container.appendChild(t.media),m.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),m.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),Ee.addStyleHook.call(t),t.isHTML5&&qe.insertElements.call(t,"source",n),t.config.title=e.title,je.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&qe.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Ee.build.call(t),t.isHTML5&&t.media.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Re=function(){function t(n,i){var a=this;if(e(this,t),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=W.touch,this.media=n,m.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||m.nodeList(this.media)||m.array(this.media))&&(this.media=this.media[0]),this.config=J({},pe,t.defaults,i||{},function(){try{return JSON.parse(a.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new be(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",W),!m.nullOrUndefined(this.media)&&m.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(W.check().api){var s=this.media.cloneNode(!0);s.autoplay=!1,this.elements.original=s;var o=this.media.tagName.toLowerCase(),r=null,l=null;switch(o){case"div":if(r=this.media.querySelector("iframe"),m.element(r)){if(l=ue(r.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?ge.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?ge.vimeo:null}(l.toString()),this.elements.container=this.media,this.media=r,this.elements.container.className="",l.search.length){var c=["1","true"];c.includes(l.searchParams.get("autoplay"))&&(this.config.autoplay=!0),c.includes(l.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=c.includes(l.searchParams.get("playsinline")),this.config.hl=l.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(m.empty(this.provider)||!Object.keys(ge).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=ye.video;break;case"video":case"audio":this.type=o,this.provider=ge.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!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=W.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new Pe(this),this.storage=new ne(this),this.media.plyr=this,m.element(this.elements.container)||(this.elements.container=A("div"),w(this.media,this.elements.container)),Ee.addStyleHook.call(this),je.setup.call(this),this.config.debug&&y.call(this,this.elements.container,this.config.events.join(" "),function(e){a.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Ee.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new Te(this),this.config.ads.enabled&&(this.ads=new Oe(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0):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 n(t,[{key:"play",value:function(){return m.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&m.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(m.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):m.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(m.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(m.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(m.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){he.toggle.call(this,e,!1)}},{key:"airplay",value:function(){W.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=x(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=L(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!m.empty(this.config.settings)&&ce.toggleMenu.call(this,!1),i!==t){var a=i?"controlshidden":"controlsshown";k.call(this,this.media,a)}return!i}return!1}},{key:"on",value:function(e,t){y.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){b.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){v(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(P(t.elements.buttons.play),P(t.elements.captions),P(t.elements.controls),P(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),m.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,a=e.options;t.removeEventListener(n,i,a)}),this.eventListeners=[])}.call(t),S(t.elements.original,t.elements.container),k.call(t,t.elements.original,"destroyed",!0),m.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),Ee.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&m.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return W.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===ge.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===ge.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===ge.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===ye.video)}},{key:"isAudio",get:function(){return Boolean(this.type===ye.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=m.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return m.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=m.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;m.string(t)&&(t=Number(t)),m.number(t)||(t=this.storage.get("volume")),m.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!m.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;m.boolean(t)||(t=this.storage.get("muted")),m.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;m.number(e)&&(t=e),m.number(t)||(t=this.storage.get("speed")),m.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!m.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(m.number),a=!0;if(!n.includes(i)){var s=function(e,t){return m.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: ".concat(i,", using ").concat(s," instead")),i=s,a=!1}t.selected=i,this.media.quality=i,a&&this.storage.set({quality:i})}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=m.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){qe.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"download",get:function(){var e=this.config.urls.download;return m.url(e)?e:this.source}},{key:"poster",set:function(e){this.isVideo?Ee.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=m.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){he.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){he.setLanguage.call(this,e,!1)},get:function(){return(he.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){if(W.pip){var t=m.boolean(e)?e:!this.pip;m.function(this.media.webkitSetPresentationMode)&&this.media.webkitSetPresentationMode(t?me:fe),m.function(this.media.requestPictureInPicture)&&(!this.pip&&t?this.media.requestPictureInPicture():this.pip&&!t&&document.exitPictureInPicture())}},get:function(){return W.pip?m.empty(this.media.webkitPresentationMode)?this.media===document.pictureInPictureElement:this.media.webkitPresentationMode===me:null}}],[{key:"supported",value:function(e,t,n){return W.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return ae(e,t)}},{key:"setup",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return m.string(e)?i=Array.from(document.querySelectorAll(e)):m.nodeList(e)?i=Array.from(e):m.array(e)&&(i=e.filter(m.element)),m.empty(i)?null:i.map(function(e){return new t(e,n)})}}]),t}();return Re.defaults=(Ie=pe,JSON.parse(JSON.stringify(Ie))),Re});
//# sourceMappingURL=plyr.min.js.map
diff --git a/templates/libs/plyr/plyr.min.js.map b/templates/libs/plyr/plyr.min.js.map
index ad4033f..e8523bd 100644
--- a/templates/libs/plyr/plyr.min.js.map
+++ b/templates/libs/plyr/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","keyboardEvent","KeyboardEvent","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","concat","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","_this","this","toggle","arguments","undefined","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","_slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","querySelectorAll","includes","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","repaint","setTimeout","offsetHeight","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","item","indexOf","getDeep","path","reduce","obj","target","sources","shift","_defineProperty","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","preventDefault","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sort","a","b","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","create","_this9","aria-haspopup","aria-controls","aria-expanded","inner","home","backButton","href","urls","isEmbed","inject","_this10","floor","random","seektime","addProperty","controlPressed","_this$config","labels","parseUrl","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_this$captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","console","prototype","onChange","first","last","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","prefix","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","rect","currentTarget","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","sign","abs","module","exports","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split$map2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","_vimeo$ratio$split$ma2","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","curr","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-res')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('data-res');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","keyboardEvent","KeyboardEvent","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","concat","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","_this","this","toggle","arguments","undefined","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","_slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","querySelectorAll","includes","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","repaint","setTimeout","offsetHeight","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","item","indexOf","getDeep","path","reduce","obj","target","sources","shift","_defineProperty","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","preventDefault","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sort","a","b","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","create","_this9","aria-haspopup","aria-controls","aria-expanded","inner","home","backButton","href","urls","isEmbed","inject","_this10","floor","random","seektime","addProperty","controlPressed","_this$config","labels","parseUrl","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_this$captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","console","prototype","onChange","first","last","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","prefix","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","rect","currentTarget","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","sign","abs","module","exports","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split$map2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","_vimeo$ratio$split$ma2","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","curr","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('data-res')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/templates/libs/plyr/plyr.polyfilled.js b/templates/libs/plyr/plyr.polyfilled.js
index eeb1010..09e1c98 100644
--- a/templates/libs/plyr/plyr.polyfilled.js
+++ b/templates/libs/plyr/plyr.polyfilled.js
@@ -3415,7 +3415,7 @@ typeof navigator === "object" && (function (global, factory) {
getQualityOptions: function getQualityOptions() {
// Get sizes from <source> elements
return html5.getSources.call(this).map(function (source) {
- return Number(source.getAttribute('data-res'));
+ return Number(source.getAttribute('data-size'));
}).filter(Boolean);
},
extend: function extend() {
@@ -3440,7 +3440,7 @@ typeof navigator === "object" && (function (global, factory) {
var sources = html5.getSources.call(player); // Get first match for requested size
var source = sources.find(function (source) {
- return Number(source.getAttribute('size')) === input;
+ return Number(source.getAttribute('data-res')) === input;
}); // No matching source found
if (!source) {
@@ -3454,7 +3454,7 @@ typeof navigator === "object" && (function (global, factory) {
preload = _player$media.preload,
readyState = _player$media.readyState; // Set new source
- player.media.src = source.getAttribute('data-res'); // Prevent loading if preload="none" and the current source isn't loaded (#1044)
+ player.media.src = source.getAttribute('src'); // Prevent loading if preload="none" and the current source isn't loaded (#1044)
if (preload !== 'none' || readyState) {
// Restore time
@@ -5285,7 +5285,7 @@ typeof navigator === "object" && (function (global, factory) {
var update = true; // If function, run it and use output
if (is$1.function(this.config.controls)) {
- this.config.controls = this.config.controls.call(this.props);
+ this.config.controls = this.config.controls.call(this, props);
} // Convert falsy controls to empty array (primarily for empty strings)
diff --git a/templates/libs/plyr/plyr.polyfilled.js.map b/templates/libs/plyr/plyr.polyfilled.js.map
index 2d53bef..6320949 100644
--- a/templates/libs/plyr/plyr.polyfilled.js.map
+++ b/templates/libs/plyr/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","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/_export.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/_iobject.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/es6.array.find.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.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/_string-ws.js","node_modules/core-js/modules/_string-trim.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/es6.number.constructor.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.keys.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.includes.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_invoke.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/_user-agent.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.number.is-nan.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","node_modules/core-js/modules/es6.regexp.constructor.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.sign.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["global","this","aFunction","isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","core","ctx","redefine","defined","uid","Iterators","toInteger","$defineProperty","cof","ITERATOR","classof","$export","toObject","getIterFn","isArrayIter","createProperty","call","toLength","isArray","speciesConstructor","asc","IObject","ArrayProto","toIObject","pIE","min","toAbsoluteIndex","$keys","spaces","fails","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","gOPD","require$$3","require$$4","inheritIfRequired","require$$5","require$$6","isRegExp","MATCH","context","wks","DESCRIPTORS","$flags","TAG","create","descriptor","setToStringTag","$iterCreate","getPrototypeOf","LIBRARY","step","addToUnscopables","proto","key","$iterators","gOPS","createArrayMethod","id","anInstance","forOf","redefineAll","validate","$has","meta","$iterDetect","weak","assign","SPECIES","invoke","cel","html","process","Promise","navigator","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","userAgent","perform","promiseResolve","require$$7","getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","plyr","dispatchEvent","unbindListeners","item","ready","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","match","querySelectorAll","includes","prototype","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","gOPN","Base","i","generateId","prefix","floor","random","format","toString","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","inactive","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","NAME","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// 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\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\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(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\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","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n\r\n if (typeof searchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n this._entries = {};\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n if (typeof URLSearchParams.prototype.sort !== 'function') {\r\n URLSearchParams.prototype.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\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","// 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.7' };\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","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","// 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","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\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","module.exports = {};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\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","// 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","// 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","'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","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\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","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","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","'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","// 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.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","'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","exports.f = {}.propertyIsEnumerable;\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 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","// 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","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 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","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\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","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\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.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","// 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.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// 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","'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","// @@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';\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';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\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 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","// 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","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\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 = $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 && typeof IteratorPrototype[ITERATOR] != 'function') 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 $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","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 $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\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","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","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","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 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 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 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 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","// 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","// @@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","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 $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-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","// @@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","// 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","// 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","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 // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\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 global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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 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 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 userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\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')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\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, exited;\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); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\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 if (domain && !exited) domain.exit();\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","// 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","// 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","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-res')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('data-res');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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","// 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.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\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","// @@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","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","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/_export.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/_iobject.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/es6.array.find.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.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/_string-ws.js","node_modules/core-js/modules/_string-trim.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/es6.number.constructor.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.keys.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.includes.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_invoke.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/_user-agent.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.number.is-nan.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","node_modules/core-js/modules/es6.regexp.constructor.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.sign.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["global","this","aFunction","isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","core","ctx","redefine","defined","uid","Iterators","toInteger","$defineProperty","cof","ITERATOR","classof","$export","toObject","getIterFn","isArrayIter","createProperty","call","toLength","isArray","speciesConstructor","asc","IObject","ArrayProto","toIObject","pIE","min","toAbsoluteIndex","$keys","spaces","fails","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","gOPD","require$$3","require$$4","inheritIfRequired","require$$5","require$$6","isRegExp","MATCH","context","wks","DESCRIPTORS","$flags","TAG","create","descriptor","setToStringTag","$iterCreate","getPrototypeOf","LIBRARY","step","addToUnscopables","proto","key","$iterators","gOPS","createArrayMethod","id","anInstance","forOf","redefineAll","validate","$has","meta","$iterDetect","weak","assign","SPECIES","invoke","cel","html","process","Promise","navigator","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","userAgent","perform","promiseResolve","require$$7","getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","plyr","dispatchEvent","unbindListeners","item","ready","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","match","querySelectorAll","includes","prototype","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","gOPN","Base","i","generateId","prefix","floor","random","format","toString","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","inactive","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","err","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","NAME","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// 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\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\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(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\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","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n\r\n if (typeof searchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n this._entries = {};\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n if (typeof URLSearchParams.prototype.sort !== 'function') {\r\n URLSearchParams.prototype.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\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","// 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.7' };\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","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","// 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","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\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","module.exports = {};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\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","// 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","// 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","'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","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\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","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","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","'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","// 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.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","'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","exports.f = {}.propertyIsEnumerable;\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 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","// 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","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 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","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\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","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\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.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","// 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.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// 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","'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","// @@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';\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';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\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 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","// 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","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\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 = $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 && typeof IteratorPrototype[ITERATOR] != 'function') 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 $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","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 $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\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","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","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","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 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 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 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 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","// 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","// @@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","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 $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-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","// @@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","// 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","// 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","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 // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\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 global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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 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 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 userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\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')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\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, exited;\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); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\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 if (domain && !exited) domain.exit();\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","// 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","// 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","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('data-res')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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","// 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.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\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","// @@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","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/templates/libs/plyr/plyr.polyfilled.min.js b/templates/libs/plyr/plyr.polyfilled.min.js
index d48fef2..9a1cf28 100644
--- a/templates/libs/plyr/plyr.polyfilled.min.js
+++ b/templates/libs/plyr/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-"object"==typeof navigator&&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";!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=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};t.prototype=window.Event.prototype,window.CustomEvent=t}}();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}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{writable:!0,value:{}}),"string"==typeof e)""!==e&&this._fromString(e);else if(e instanceof o){var t=this;e.forEach(function(e,n){t.append(n,e)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e=[];return this.forEach(function(t,n){e.push(i(n)+"="+i(t))}),e.join("&")},Object.defineProperty(a,"_fromString",{enumerable:!1,configurable:!1,writable:!1,value:function(e){this._entries={};for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}}),e.URLSearchParams=o}(),"function"!=typeof URLSearchParams.prototype.sort&&(URLSearchParams.prototype.sort=function(){var e=this,t=[];this.forEach(function(n,i){t.push([i,n]),e._entries||e.delete(i)}),t.sort(function(e,t){return e[0]<t[0]?-1:e[0]>t[0]?1:0}),e._entries&&(e._entries={});for(var n=0;n<t.length;n++)this.append(t[n][0],t[n][1])})}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t));var i,r=document;if(n&&(void 0===e.location||n!==e.location.href)){(i=(r=document.implementation.createHTMLDocument("")).createElement("base")).href=n,r.head.appendChild(i);try{if(0!==i.href.indexOf(n))throw new Error(i.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var o=r.createElement("a");if(o.href=t,i&&(r.body.appendChild(o),o.href=o.href),":"===o.protocol||!/:/.test(o.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:o});var a=new URLSearchParams(this.search),s=!0,l=!0,c=this;["append","delete","set"].forEach(function(e){var t=a[e];a[e]=function(){t.apply(a,arguments),s&&(l=!1,c.search=a.toString(),l=!0)}}),Object.defineProperty(this,"searchParams",{value:a,enumerable:!0});var u=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==u&&(u=this.search,l&&(s=!1,this.searchParams._fromString(this.search),s=!0))}})},i=n.prototype;["hash","host","hostname","port","protocol"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperty(i,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var n=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},i=function(e,t,i){if(n(e),void 0===t)return e;switch(i){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)}},r=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)}),o=t(function(e){var t=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=t)}),a=(o.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),s=function(e){if(!a(e))throw TypeError(e+" is not an object!");return e},l=function(e){try{return!!e()}catch(e){return!0}},c=!l(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),u=r.document,d=a(u)&&a(u.createElement),h=function(e){return d?u.createElement(e):{}},f=!c&&!l(function(){return 7!=Object.defineProperty(h("div"),"a",{get:function(){return 7}}).a}),p=function(e,t){if(!a(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!a(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!a(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!a(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},m=Object.defineProperty,g={f:c?Object.defineProperty:function(e,t,n){if(s(e),t=p(t,!0),s(n),f)try{return m(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}},y=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},v=c?function(e,t,n){return g.f(e,t,y(1,n))}:function(e,t,n){return e[t]=n,e},b={}.hasOwnProperty,k=function(e,t){return b.call(e,t)},w=0,T=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++w+T).toString(36))},A=t(function(e){var t=E("src"),n=Function.toString,i=(""+n).split("toString");o.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,o,a){var s="function"==typeof o;s&&(k(o,"name")||v(o,"name",n)),e[n]!==o&&(s&&(k(o,t)||v(o,t,e[n]?""+e[n]:i.join(String(n)))),e===r?e[n]=o:a?e[n]?e[n]=o:v(e,n,o):(delete e[n],v(e,n,o)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),_=function(e,t,n){var a,s,l,c,u=e&_.F,d=e&_.G,h=e&_.S,f=e&_.P,p=e&_.B,m=d?r:h?r[t]||(r[t]={}):(r[t]||{}).prototype,g=d?o:o[t]||(o[t]={}),y=g.prototype||(g.prototype={});for(a in d&&(n=t),n)l=((s=!u&&m&&void 0!==m[a])?m:n)[a],c=p&&s?i(l,r):f&&"function"==typeof l?i(Function.call,l):l,m&&A(m,a,l,e&_.U),g[a]!=l&&v(g,a,c),f&&y[a]!=l&&(y[a]=l)};r.core=o,_.F=1,_.G=2,_.S=4,_.P=8,_.B=16,_.W=32,_.U=64,_.R=128;var S=_,P=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},C=function(e){return Object(P(e))},L=function(e,t,n,i){try{return i?t(s(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&s(r.call(e)),t}},M={},N=t(function(e){var t=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,n){return t[e]||(t[e]=void 0!==n?n:{})})("versions",[]).push({version:o.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})}),x=t(function(e){var t=N("wks"),n=r.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:E)("Symbol."+e))}).store=t}),O=x("iterator"),j=Array.prototype,I=function(e){return void 0!==e&&(M.Array===e||j[O]===e)},R=Math.ceil,F=Math.floor,D=function(e){return isNaN(e=+e)?0:(e>0?F:R)(e)},q=Math.min,V=function(e){return e>0?q(D(e),9007199254740991):0},B=function(e,t,n){t in e?g.f(e,t,y(0,n)):e[t]=n},H={}.toString,U=function(e){return H.call(e).slice(8,-1)},W=x("toStringTag"),K="Arguments"==U(function(){return arguments}()),z=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),W))?n:K?U(t):"Object"==(i=U(t))&&"function"==typeof t.callee?"Arguments":i},Y=x("iterator"),G=o.getIteratorMethod=function(e){if(null!=e)return e[Y]||e["@@iterator"]||M[z(e)]},$=x("iterator"),J=!1;try{[7][$]().return=function(){J=!0}}catch(e){}var Q=function(e,t){if(!t&&!J)return!1;var n=!1;try{var i=[7],r=i[$]();r.next=function(){return{done:n=!0}},i[$]=function(){return r},e(i)}catch(e){}return n};S(S.S+S.F*!Q(function(e){}),"Array",{from:function(e){var t,n,r,o,a=C(e),s="function"==typeof this?this:Array,l=arguments.length,c=l>1?arguments[1]:void 0,u=void 0!==c,d=0,h=G(a);if(u&&(c=i(c,l>2?arguments[2]:void 0,2)),null==h||s==Array&&I(h))for(n=new s(t=V(a.length));t>d;d++)B(n,d,u?c(a[d],d):a[d]);else for(o=h.call(a),n=new s;!(r=o.next()).done;d++)B(n,d,u?L(o,c,[r.value,d],!0):r.value);return n.length=d,n}});var X=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==U(e)?e.split(""):Object(e)},Z=Array.isArray||function(e){return"Array"==U(e)},ee=x("species"),te=function(e,t){return new(function(e){var t;return Z(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Z(t.prototype)||(t=void 0),a(t)&&null===(t=t[ee])&&(t=void 0)),void 0===t?Array:t}(e))(t)},ne=function(e,t){var n=1==e,r=2==e,o=3==e,a=4==e,s=6==e,l=5==e||s,c=t||te;return function(t,u,d){for(var h,f,p=C(t),m=X(p),g=i(u,d,3),y=V(m.length),v=0,b=n?c(t,y):r?c(t,0):void 0;y>v;v++)if((l||v in m)&&(f=g(h=m[v],v,p),e))if(n)b[v]=f;else if(f)switch(e){case 3:return!0;case 5:return h;case 6:return v;case 2:b.push(h)}else if(a)return!1;return s?-1:o||a?a:b}},ie=x("unscopables"),re=Array.prototype;null==re[ie]&&v(re,ie,{});var oe=function(e){re[ie][e]=!0},ae=ne(5),se=!0;"find"in[]&&Array(1).find(function(){se=!1}),S(S.P+S.F*se,"Array",{find:function(e){return ae(this,e,arguments.length>1?arguments[1]:void 0)}}),oe("find");var le={f:{}.propertyIsEnumerable},ce=function(e){return X(P(e))},ue=Object.getOwnPropertyDescriptor,de={f:c?ue:function(e,t){if(e=ce(e),t=p(t,!0),f)try{return ue(e,t)}catch(e){}if(k(e,t))return y(!le.f.call(e,t),e[t])}},he=function(e,t){if(s(e),!a(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},fe={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=i(Function.call,de.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return he(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:he}.set,pe=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&a(i)&&fe&&fe(e,i),e},me=Math.max,ge=Math.min,ye=function(e){return function(t,n,i){var r,o=ce(t),a=V(o.length),s=function(e,t){return(e=D(e))<0?me(e+t,0):ge(e,t)}(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},ve=N("keys"),be=function(e){return ve[e]||(ve[e]=E(e))},ke=ye(!1),we=be("IE_PROTO"),Te=function(e,t){var n,i=ce(e),r=0,o=[];for(n in i)n!=we&&k(i,n)&&o.push(n);for(;t.length>r;)k(i,n=t[r++])&&(~ke(o,n)||o.push(n));return o},Ee="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),Ae=Ee.concat("length","prototype"),_e={f:Object.getOwnPropertyNames||function(e){return Te(e,Ae)}},Se="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",Pe="["+Se+"]",Ce=RegExp("^"+Pe+Pe+"*"),Le=RegExp(Pe+Pe+"*$"),Me=function(e,t,n){var i={},r=l(function(){return!!Se[e]()||"​…"!="​…"[e]()}),o=i[e]=r?t(Ne):Se[e];n&&(i[n]=o),S(S.P+S.F*r,"String",i)},Ne=Me.trim=function(e,t){return e=String(P(e)),1&t&&(e=e.replace(Ce,"")),2&t&&(e=e.replace(Le,"")),e},xe=Me,Oe=Object.keys||function(e){return Te(e,Ee)},je=c?Object.defineProperties:function(e,t){s(e);for(var n,i=Oe(t),r=i.length,o=0;r>o;)g.f(e,n=i[o++],t[n]);return e},Ie=r.document,Re=Ie&&Ie.documentElement,Fe=be("IE_PROTO"),De=function(){},qe=function(){var e,t=h("iframe"),n=Ee.length;for(t.style.display="none",Re.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[Ee[n]];return qe()},Ve=Object.create||function(e,t){var n;return null!==e?(De.prototype=s(e),n=new De,De.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:je(n,t)},Be=_e.f,He=de.f,Ue=g.f,We=xe.trim,Ke=r.Number,ze=Ke,Ye=Ke.prototype,Ge="Number"==U(Ve(Ye)),$e="trim"in String.prototype,Je=function(e){var t=p(e,!1);if("string"==typeof t&&t.length>2){var n,i,r,o=(t=$e?t.trim():We(t,3)).charCodeAt(0);if(43===o||45===o){if(88===(n=t.charCodeAt(2))||120===n)return NaN}else if(48===o){switch(t.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+t}for(var a,s=t.slice(2),l=0,c=s.length;l<c;l++)if((a=s.charCodeAt(l))<48||a>r)return NaN;return parseInt(s,i)}}return+t};if(!Ke(" 0o1")||!Ke("0b1")||Ke("+0x1")){Ke=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof Ke&&(Ge?l(function(){Ye.valueOf.call(n)}):"Number"!=U(n))?pe(new ze(Je(t)),n,Ke):Je(t)};for(var Qe,Xe=c?Be(ze):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),Ze=0;Xe.length>Ze;Ze++)k(ze,Qe=Xe[Ze])&&!k(Ke,Qe)&&Ue(Ke,Qe,He(ze,Qe));Ke.prototype=Ye,Ye.constructor=Ke,A(r,"Number",Ke)}!function(e,t){var n=(o.Object||{})[e]||Object[e],i={};i[e]=t(n),S(S.S+S.F*l(function(){n(1)}),"Object",i)}("keys",function(){return function(e){return Oe(C(e))}});var et=x("match"),tt=function(e){var t;return a(e)&&(void 0!==(t=e[et])?!!t:"RegExp"==U(e))},nt=function(e,t,n){if(tt(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(P(e))},it=x("match"),rt=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[it]=!1,!"/./"[e](t)}catch(e){}}return!0};S(S.P+S.F*rt("includes"),"String",{includes:function(e){return!!~nt(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var ot=ye(!0);S(S.P,"Array",{includes:function(e){return ot(this,e,arguments.length>1?arguments[1]:void 0)}}),oe("includes");var at=function(e,t,n){var i=x(e),r=n(P,i,""[e]),o=r[0],a=r[1];l(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(A(String.prototype,e,o),v(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};at("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var st=function(){var e=s(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t};c&&"g"!=/./g.flags&&g.f(RegExp.prototype,"flags",{configurable:!0,get:st});var lt=/./.toString,ct=function(e){A(RegExp.prototype,"toString",e,!0)};l(function(){return"/a/b"!=lt.call({source:"a",flags:"b"})})?ct(function(){var e=s(this);return"/".concat(e.source,"/","flags"in e?e.flags:!c&&e instanceof RegExp?st.call(e):void 0)}):"toString"!=lt.name&&ct(function(){return lt.call(this)});var ut=function(e,t){return{value:t,done:!!e}},dt=g.f,ht=x("toStringTag"),ft=function(e,t,n){e&&!k(e=n?e:e.prototype,ht)&&dt(e,ht,{configurable:!0,value:t})},pt={};v(pt,x("iterator"),function(){return this});var mt=function(e,t,n){e.prototype=Ve(pt,{next:y(1,n)}),ft(e,t+" Iterator")},gt=be("IE_PROTO"),yt=Object.prototype,vt=Object.getPrototypeOf||function(e){return e=C(e),k(e,gt)?e[gt]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?yt:null},bt=x("iterator"),kt=!([].keys&&"next"in[].keys()),wt=function(){return this},Tt=function(e,t,n,i,r,o,a){mt(n,t,i);var s,l,c,u=function(e){if(!kt&&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",h="values"==r,f=!1,p=e.prototype,m=p[bt]||p["@@iterator"]||r&&p[r],g=m||u(r),y=r?h?u("entries"):g:void 0,b="Array"==t&&p.entries||m;if(b&&(c=vt(b.call(new e)))!==Object.prototype&&c.next&&(ft(c,d,!0),"function"!=typeof c[bt]&&v(c,bt,wt)),h&&m&&"values"!==m.name&&(f=!0,g=function(){return m.call(this)}),(kt||f||!p[bt])&&v(p,bt,g),M[t]=g,M[d]=wt,r)if(s={values:h?g:u("values"),keys:o?g:u("keys"),entries:y},a)for(l in s)l in p||A(p,l,s[l]);else S(S.P+S.F*(kt||f),t,s);return s},Et=Tt(Array,"Array",function(e,t){this._t=ce(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,ut(1)):ut(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");M.Arguments=M.Array,oe("keys"),oe("values"),oe("entries");for(var At=x("iterator"),_t=x("toStringTag"),St=M.Array,Pt={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},Ct=Oe(Pt),Lt=0;Lt<Ct.length;Lt++){var Mt,Nt=Ct[Lt],xt=Pt[Nt],Ot=r[Nt],jt=Ot&&Ot.prototype;if(jt&&(jt[At]||v(jt,At,St),jt[_t]||v(jt,_t,Nt),M[Nt]=St,xt))for(Mt in Et)jt[Mt]||A(jt,Mt,Et[Mt],!0)}var It=function(e){return function(t,n){var i,r,o=String(P(t)),a=D(n),s=o.length;return a<0||a>=s?e?"":void 0:(i=o.charCodeAt(a))<55296||i>56319||a+1===s||(r=o.charCodeAt(a+1))<56320||r>57343?e?o.charAt(a):i:e?o.slice(a,a+2):r-56320+(i-55296<<10)+65536}}(!0);Tt(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=It(t,n),this._i+=e.length,{value:e,done:!1})});var Rt=t(function(e){var t=E("meta"),n=g.f,i=0,r=Object.isExtensible||function(){return!0},o=!l(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!k(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!k(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&c.NEED&&r(e)&&!k(e,t)&&s(e),e}}}),Ft=(Rt.KEY,Rt.NEED,Rt.fastKey,Rt.getWeak,Rt.onFreeze,{f:Object.getOwnPropertySymbols}),Dt=Object.assign,qt=!Dt||l(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Dt({},e)[n]||Object.keys(Dt({},t)).join("")!=i})?function(e,t){for(var n=C(e),i=arguments.length,r=1,o=Ft.f,a=le.f;i>r;)for(var s,l=X(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,d=0;u>d;)a.call(l,s=c[d++])&&(n[s]=l[s]);return n}:Dt,Vt=function(e,t,n){for(var i in t)A(e,i,t[i],n);return e},Bt=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ht=t(function(e){var t={},n={},r=e.exports=function(e,r,o,a,l){var c,u,d,h,f=l?function(){return e}:G(e),p=i(o,a,r?2:1),m=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(I(f)){for(c=V(e.length);c>m;m++)if((h=r?p(s(u=e[m])[0],u[1]):p(e[m]))===t||h===n)return h}else for(d=f.call(e);!(u=d.next()).done;)if((h=L(d,p,u.value,r))===t||h===n)return h};r.BREAK=t,r.RETURN=n}),Ut=function(e,t){if(!a(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},Wt=Rt.getWeak,Kt=ne(5),zt=ne(6),Yt=0,Gt=function(e){return e._l||(e._l=new $t)},$t=function(){this.a=[]},Jt=function(e,t){return Kt(e.a,function(e){return e[0]===t})};$t.prototype={get:function(e){var t=Jt(this,e);if(t)return t[1]},has:function(e){return!!Jt(this,e)},set:function(e,t){var n=Jt(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=zt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Qt={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=Yt++,e._l=void 0,null!=o&&Ht(o,n,e[i],e)});return Vt(r.prototype,{delete:function(e){if(!a(e))return!1;var n=Wt(e);return!0===n?Gt(Ut(this,t)).delete(e):n&&k(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=Wt(e);return!0===n?Gt(Ut(this,t)).has(e):n&&k(n,this._i)}}),r},def:function(e,t,n){var i=Wt(s(t),!0);return!0===i?Gt(e).set(t,n):i[e._i]=n,e},ufstore:Gt};t(function(e){var t,n=ne(0),i=Rt.getWeak,o=Object.isExtensible,s=Qt.ufstore,c={},u=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},d={get:function(e){if(a(e)){var t=i(e);return!0===t?s(Ut(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Qt.def(Ut(this,"WeakMap"),e,t)}},h=e.exports=function(e,t,n,i,o,s){var c=r[e],u=c,d=o?"set":"add",h=u&&u.prototype,f={},p=function(e){var t=h[e];A(h,e,"delete"==e?function(e){return!(s&&!a(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(s&&!a(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return s&&!a(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&&(s||h.forEach&&!l(function(){(new u).entries().next()}))){var m=new u,g=m[d](s?{}:-0,1)!=m,y=l(function(){m.has(1)}),v=Q(function(e){new u(e)}),b=!s&&l(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});v||((u=t(function(t,n){Bt(t,u,e);var i=pe(new c,t,u);return null!=n&&Ht(n,o,i[d],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),o&&p("get")),(b||g)&&p(d),s&&h.clear&&delete h.clear}else u=i.getConstructor(t,e,o,d),Vt(u.prototype,n),Rt.NEED=!0;return ft(u,e),f[e]=u,S(S.G+S.W+S.F*(u!=c),f),s||i.setStrong(u,e,o),u}("WeakMap",u,d,Qt,!0,!0);l(function(){return 7!=(new h).set((Object.freeze||Object)(c),7).get(c)})&&(t=Qt.getConstructor(u,"WeakMap"),qt(t.prototype,d),Rt.NEED=!0,n(["delete","has","get","set"],function(e){var n=h.prototype,i=n[e];A(n,e,function(n,r){if(a(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,r);return"set"==e?this:s}return i.call(this,n,r)})}))});function Xt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zt(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)}}function en(e,t,n){return t&&Zt(e.prototype,t),n&&Zt(e,n),e}function tn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function rn(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}S(S.S+S.F,"Object",{assign:qt}),at("split",2,function(e,t,n){var i=tt,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 a=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 s,l,c,u,d,h=[],f=(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,f+"g");for(a||(s=new RegExp("^"+g.source+"$(?!\\s)",f));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,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(h,l.slice(1)),u=l[0].length,p=c,h.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||h.push(""):h.push(n.slice(p)),h.length>m?h.slice(0,m):h}}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),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]});var on=le.f,an=function(e){return function(t){for(var n,i=ce(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)on.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},sn=an(!0);S(S.S,"Object",{entries:function(e){return sn(e)}});var ln=an(!1);S(S.S,"Object",{values:function(e){return ln(e)}}),at("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]});var cn,un,dn,hn=x("species"),fn=r.process,pn=r.setImmediate,mn=r.clearImmediate,gn=r.MessageChannel,yn=r.Dispatch,vn=0,bn={},kn=function(){var e=+this;if(bn.hasOwnProperty(e)){var t=bn[e];delete bn[e],t()}},wn=function(e){kn.call(e.data)};pn&&mn||(pn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return bn[++vn]=function(){!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])}e.apply(n,t)}("function"==typeof e?e:Function(e),t)},cn(vn),vn},mn=function(e){delete bn[e]},"process"==U(fn)?cn=function(e){fn.nextTick(i(kn,e,1))}:yn&&yn.now?cn=function(e){yn.now(i(kn,e,1))}:gn?(dn=(un=new gn).port2,un.port1.onmessage=wn,cn=i(dn.postMessage,dn,1)):r.addEventListener&&"function"==typeof postMessage&&!r.importScripts?(cn=function(e){r.postMessage(e+"","*")},r.addEventListener("message",wn,!1)):cn="onreadystatechange"in h("script")?function(e){Re.appendChild(h("script")).onreadystatechange=function(){Re.removeChild(this),kn.call(e)}}:function(e){setTimeout(i(kn,e,1),0)});var Tn={set:pn,clear:mn},En=Tn.set,An=r.MutationObserver||r.WebKitMutationObserver,_n=r.process,Sn=r.Promise,Pn="process"==U(_n);function Cn(e){var t,i;this.promise=new e(function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n}),this.resolve=n(t),this.reject=n(i)}var Ln,Mn,Nn,xn,On={f:function(e){return new Cn(e)}},jn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},In=r.navigator,Rn=In&&In.userAgent||"",Fn=x("species"),Dn=function(e){var t=r[e];c&&t&&!t[Fn]&&g.f(t,Fn,{configurable:!0,get:function(){return this}})},qn=Tn.set,Vn=function(){var e,t,n,i=function(){var i,r;for(Pn&&(i=_n.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(Pn)n=function(){_n.nextTick(i)};else if(!An||r.navigator&&r.navigator.standalone)if(Sn&&Sn.resolve){var o=Sn.resolve(void 0);n=function(){o.then(i)}}else n=function(){En.call(r,i)};else{var a=!0,s=document.createTextNode("");new An(i).observe(s,{characterData:!0}),n=function(){s.data=a=!a}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}}(),Bn=r.TypeError,Hn=r.process,Un=Hn&&Hn.versions,Wn=Un&&Un.v8||"",Kn=r.Promise,zn="process"==z(Hn),Yn=function(){},Gn=Mn=On.f,$n=!!function(){try{var e=Kn.resolve(1),t=(e.constructor={})[x("species")]=function(e){e(Yn,Yn)};return(zn||"function"==typeof PromiseRejectionEvent)&&e.then(Yn)instanceof t&&0!==Wn.indexOf("6.6")&&-1===Rn.indexOf("Chrome/66")}catch(e){}}(),Jn=function(e){var t;return!(!a(e)||"function"!=typeof(t=e.then))&&t},Qn=function(e,t){if(!e._n){e._n=!0;var n=e._c;Vn(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a,s=r?t.ok:t.fail,l=t.resolve,c=t.reject,u=t.domain;try{s?(r||(2==e._h&&ei(e),e._h=1),!0===s?n=i:(u&&u.enter(),n=s(i),u&&(u.exit(),a=!0)),n===t.promise?c(Bn("Promise-chain cycle")):(o=Jn(n))?o.call(n,l,c):l(n)):c(i)}catch(e){u&&!a&&u.exit(),c(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Xn(e)})}},Xn=function(e){qn.call(r,function(){var t,n,i,o=e._v,a=Zn(e);if(a&&(t=jn(function(){zn?Hn.emit("unhandledRejection",o,e):(n=r.onunhandledrejection)?n({promise:e,reason:o}):(i=r.console)&&i.error&&i.error("Unhandled promise rejection",o)}),e._h=zn||Zn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Zn=function(e){return 1!==e._h&&0===(e._a||e._c).length},ei=function(e){qn.call(r,function(){var t;zn?Hn.emit("rejectionHandled",e):(t=r.onrejectionhandled)&&t({promise:e,reason:e._v})})},ti=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()),Qn(t,!0))},ni=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Bn("Promise can't be resolved itself");(t=Jn(e))?Vn(function(){var r={_w:n,_d:!1};try{t.call(e,i(ni,r,1),i(ti,r,1))}catch(e){ti.call(r,e)}}):(n._v=e,n._s=1,Qn(n,!1))}catch(e){ti.call({_w:n,_d:!1},e)}}};$n||(Kn=function(e){Bt(this,Kn,"Promise","_h"),n(e),Ln.call(this);try{e(i(ni,this,1),i(ti,this,1))}catch(e){ti.call(this,e)}},(Ln=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=Vt(Kn.prototype,{then:function(e,t){var i,r,o,a=Gn((i=Kn,void 0===(o=s(this).constructor)||null==(r=s(o)[hn])?i:n(r)));return a.ok="function"!=typeof e||e,a.fail="function"==typeof t&&t,a.domain=zn?Hn.domain:void 0,this._c.push(a),this._a&&this._a.push(a),this._s&&Qn(this,!1),a.promise},catch:function(e){return this.then(void 0,e)}}),Nn=function(){var e=new Ln;this.promise=e,this.resolve=i(ni,e,1),this.reject=i(ti,e,1)},On.f=Gn=function(e){return e===Kn||e===xn?new Nn(e):Mn(e)}),S(S.G+S.W+S.F*!$n,{Promise:Kn}),ft(Kn,"Promise"),Dn("Promise"),xn=o.Promise,S(S.S+S.F*!$n,"Promise",{reject:function(e){var t=Gn(this);return(0,t.reject)(e),t.promise}}),S(S.S+S.F*!$n,"Promise",{resolve:function(e){return function(e,t){if(s(e),a(t)&&t.constructor===e)return t;var n=On.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),S(S.S+S.F*!($n&&Q(function(e){Kn.all(e).catch(Yn)})),"Promise",{all:function(e){var t=this,n=Gn(t),i=n.resolve,r=n.reject,o=jn(function(){var n=[],o=0,a=1;Ht(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Gn(t),i=n.reject,r=jn(function(){Ht(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var ii="".startsWith;S(S.P+S.F*rt("startsWith"),"String",{startsWith:function(e){var t=nt(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return ii?ii.call(t,i,n):t.slice(n,n+i.length)===i}}),S(S.S,"Number",{isNaN:function(e){return e!=e}});var ri=function(e){return null!=e?e.constructor:null},oi=function(e,t){return Boolean(e&&t&&e instanceof t)},ai=function(e){return null==e},si=function(e){return ri(e)===Object},li=function(e){return ri(e)===String},ci=function(e){return Array.isArray(e)},ui=function(e){return oi(e,NodeList)},di=function(e){return ai(e)||(li(e)||ci(e)||ui(e))&&!e.length||si(e)&&!Object.keys(e).length},hi={nullOrUndefined:ai,object:si,number:function(e){return ri(e)===Number&&!Number.isNaN(e)},string:li,boolean:function(e){return ri(e)===Boolean},function:function(e){return ri(e)===Function},array:ci,weakMap:function(e){return oi(e,WeakMap)},nodeList:ui,element:function(e){return oi(e,Element)},textNode:function(e){return ri(e)===Text},event:function(e){return oi(e,Event)},keyboardEvent:function(e){return oi(e,KeyboardEvent)},cue:function(e){return oi(e,window.TextTrackCue)||oi(e,window.VTTCue)},track:function(e){return oi(e,TextTrack)||!ai(e)&&li(e.kind)},url:function(e){if(oi(e,window.URL))return!0;if(!li(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!di(new URL(t).hostname)}catch(e){return!1}},empty:di},fi=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function pi(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!hi.empty(t)&&hi.function(n)){var s=t.split(" "),l=a;fi&&(l={passive:o,capture:a}),s.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function mi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,n,!0,i,r)}function gi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,n,!1,i,r)}function yi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,function o(){gi(e,t,o,i,r);for(var a=arguments.length,s=new Array(a),l=0;l<a;l++)s[l]=arguments[l];n.apply(this,s)},!0,i,r)}function vi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(hi.element(e)&&!hi.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function bi(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)})}function ki(e,t){hi.element(e)&&!hi.empty(t)&&Object.entries(t).filter(function(e){var t=nn(e,2)[1];return!hi.nullOrUndefined(t)}).forEach(function(t){var n=nn(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function wi(e,t,n){var i=document.createElement(e);return hi.object(t)&&ki(i,t),hi.string(n)&&(i.innerText=n),i}function Ti(e,t,n,i){hi.element(t)&&t.appendChild(wi(e,n,i))}function Ei(e){hi.nodeList(e)||hi.array(e)?Array.from(e).forEach(Ei):hi.element(e)&&hi.element(e.parentNode)&&e.parentNode.removeChild(e)}function Ai(e){if(hi.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function _i(e,t){return hi.element(t)&&hi.element(t.parentNode)&&hi.element(e)?(t.parentNode.replaceChild(e,t),e):null}function Si(e,t){if(!hi.string(e)||hi.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("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":hi.object(i)&&hi.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n}function Pi(e,t){if(hi.element(e)){var n=t;hi.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function Ci(e,t,n){if(hi.nodeList(e))return Array.from(e).map(function(e){return Ci(e,t,n)});if(hi.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function Li(e,t){return hi.element(e)&&e.classList.contains(t)}function Mi(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function Ni(e){return this.elements.container.querySelectorAll(e)}function xi(e){return this.elements.container.querySelector(e)}function Oi(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];hi.element(e)&&(e.focus({preventScroll:!0}),t&&Ci(e,this.config.classNames.tabFocus))}var ji,Ii,Ri,Fi=(ji=document.createElement("span"),Ii={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Ri=Object.keys(Ii).find(function(e){return void 0!==ji.style[e]}),!!hi.string(Ri)&&Ii[Ri]);function Di(e){setTimeout(function(){try{Pi(e,!0),e.offsetHeight,Pi(e,!1)}catch(e){}},0)}var qi,Vi={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)},Bi={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Hi={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Vi.isIPhone&&n&&Hi.playsinline,r=Hi[e]||"html5"!==t;return{api:r,ui:r&&Hi.rangeInput&&("video"!==e||!Vi.isIPhone||i)}},pip:!(Vi.isIPhone||!hi.function(wi("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||wi("video").disablePictureInPicture)),airplay:hi.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=nn(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Bi).includes(n)&&(n+='; codecs="'.concat(Bi[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(qi=document.createElement("input"),qi.type="range","range"===qi.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Fi,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Ui={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return Hi.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return Ui.getSources.call(this).map(function(e){return Number(e.getAttribute("data-res"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Ui.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("data-res"))},set:function(t){var n=Ui.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,o=i.paused,a=i.preload,s=i.readyState;e.media.src=n.getAttribute("data-res"),("none"!==a||s)&&(e.once("loadedmetadata",function(){e.currentTime=r,o||e.play()}),e.media.load()),vi.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(Ei(Ui.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function Wi(e){return hi.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Ki(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function zi(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new 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 hi.object(r)?(Object.keys(r).forEach(function(t){hi.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,tn({},t,{})),zi(e[t],r[t])):Object.assign(e,tn({},t,r[t]))}),zi.apply(void 0,[e].concat(n))):e}var Yi=g.f,Gi=_e.f,$i=r.RegExp,Ji=$i,Qi=$i.prototype,Xi=/a/g,Zi=/a/g,er=new $i(Xi)!==Xi;if(c&&(!er||l(function(){return Zi[x("match")]=!1,$i(Xi)!=Xi||$i(Zi)==Zi||"/a/i"!=$i(Xi,"i")}))){$i=function(e,t){var n=this instanceof $i,i=tt(e),r=void 0===t;return!n&&i&&e.constructor===$i&&r?e:pe(er?new Ji(i&&!r?e.source:e,t):Ji((i=e instanceof $i)?e.source:e,i&&r?st.call(e):t),n?this:Qi,$i)};for(var tr=function(e){e in $i||Yi($i,e,{configurable:!0,get:function(){return Ji[e]},set:function(t){Ji[e]=t}})},nr=Gi(Ji),ir=0;nr.length>ir;)tr(nr[ir++]);Qi.constructor=$i,$i.prototype=Qi,A(r,"RegExp",$i)}function rr(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return hi.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function or(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function ar(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function sr(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=or(e,"-"," "),e=or(e,"_"," "),or(e=ar(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function lr(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}Dn("RegExp");var cr={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},ur=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(hi.empty(e)||hi.empty(t))return"";var n=Ki(t.i18n,e);if(hi.empty(n))return Object.keys(cr).includes(e)?cr[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=nn(e,2),i=t[0],r=t[1];n=or(n,i,r)}),n},dr=function(){function e(t){Xt(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return en(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(hi.empty(n))return null;var i=JSON.parse(n);return hi.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&hi.object(t)){var n=this.get();hi.empty(n)&&(n={}),zi(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function hr(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.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function fr(e,t){if(hi.string(e)){var n=hi.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var o=dr.supported,a=document.createElement("div");if(a.setAttribute("hidden",""),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==s){var l=JSON.parse(s);r(a,l.content)}}hr(e).then(function(e){hi.empty(e)||(o&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}}var pr=function(e){return parseInt(e/60/60%60,10)},mr=function(e){return parseInt(e/60%60,10)},gr=function(e){return parseInt(e%60,10)};function yr(){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(!hi.number(e))return yr(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=pr(e),o=mr(e),a=gr(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(o),":").concat(i(a))}var vr={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Vi.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=xi.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Ni.call(this,this.config.selectors.buttons.play),pause:xi.call(this,this.config.selectors.buttons.pause),restart:xi.call(this,this.config.selectors.buttons.restart),rewind:xi.call(this,this.config.selectors.buttons.rewind),fastForward:xi.call(this,this.config.selectors.buttons.fastForward),mute:xi.call(this,this.config.selectors.buttons.mute),pip:xi.call(this,this.config.selectors.buttons.pip),airplay:xi.call(this,this.config.selectors.buttons.airplay),settings:xi.call(this,this.config.selectors.buttons.settings),captions:xi.call(this,this.config.selectors.buttons.captions),fullscreen:xi.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=xi.call(this,this.config.selectors.progress),this.elements.inputs={seek:xi.call(this,this.config.selectors.inputs.seek),volume:xi.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:xi.call(this,this.config.selectors.display.buffer),currentTime:xi.call(this,this.config.selectors.display.currentTime),duration:xi.call(this,this.config.selectors.display.duration)},hi.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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}},createIcon:function(e,t){var n=vr.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");ki(r,zi(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a="".concat(i,"-").concat(e);return"href"in o&&o.setAttributeNS("http://www.w3.org/1999/xlink","href",a),o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=ur(e,this.config);return wi("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(hi.empty(e))return null;var t=wi("span",{class:this.config.classNames.menu.value});return t.appendChild(wi("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=sr(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:hi.empty(r.label)&&(r.label=i),hi.empty(r.icon)&&(r.icon=e)}var o=wi(r.element);return r.toggle?(o.appendChild(vr.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),o.appendChild(vr.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),o.appendChild(vr.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),o.appendChild(vr.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(o.appendChild(vr.createIcon.call(this,r.icon)),o.appendChild(vr.createLabel.call(this,r.label))),zi(n,Si(this.config.selectors.buttons[i],n)),ki(o,n),"play"===i?(hi.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(o)):this.elements.buttons[i]=o,o},createRange:function(e,t){var n=wi("input",zi(Si(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":ur(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,vr.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=wi("progress",zi(Si(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(wi("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?ur(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=Si(this.config.selectors.display[e]),n=wi("div",zi(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":ur(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;mi(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,o=Mi(e,'[role="menuitemradio"]');if(!o&&[32,39].includes(i.which))vr.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||o&&39===i.which?(r=e.nextElementSibling,hi.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,hi.element(r)||(r=e.parentNode.lastElementChild)),Oi.call(n,r,!0))}},!1),mi(e,"keyup",function(e){13===e.which&&vr.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,o=e.title,a=e.badge,s=void 0===a?null:a,l=e.checked,c=void 0!==l&&l,u=Si(this.config.selectors.inputs[r]),d=wi("button",zi(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=wi("span");h.innerHTML=o,hi.element(s)&&h.appendChild(s),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return Mi(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!hi.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}vr.showMenuPanel.call(t,"home",hi.keyboardEvent(e))}},r,!1),vr.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return hi.number(e)?yr(e,pr(this.duration)>0,t):e},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];hi.element(e)&&hi.number(t)&&(e.innerText=vr.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(hi.element(this.elements.inputs.volume)&&vr.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),hi.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;hi.element(e)&&(e.value=t,vr.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&hi.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&vr.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=hi.number(n)?n:0,r=hi.element(e)?e:t.elements.display.buffer;if(hi.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];hi.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=hi.event(e)?e.target:e;if(hi.element(t)&&"range"===t.getAttribute("type")){if(Mi(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=vr.formatTime(this.currentTime),i=vr.formatTime(this.duration),r=ur("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(Mi(t,this.config.selectors.inputs.volume)){var o=100*t.value;t.setAttribute("aria-valuenow",o),t.setAttribute("aria-valuetext","".concat(o.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);Vi.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&hi.element(this.elements.inputs.seek)&&hi.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),o=function(e){Ci(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(hi.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Li(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),vr.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),hi.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!hi.element(this.elements.display.duration)&&this.config.invertTime;vr.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||vr.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return Pi(this.elements.display.currentTime,!0),void Pi(this.elements.progress,!0);hi.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=hi.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&vr.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&vr.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),vr.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){Pi(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,o=t;if("captions"===e)r=this.currentTrack;else{if(r=hi.empty(n)?this[e]:n,hi.empty(r)&&(r=this.config[e].default),!hi.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if(hi.element(o)||(o=i&&i.querySelector('[role="menu"]')),hi.element(o)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=vr.getLabel.call(this,e,r);var a=o&&o.querySelector('[value="'.concat(r,'"]'));hi.element(a)&&(a.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?ur("normal",this.config):"".concat(t,"&times;");case"quality":if(hi.number(t)){var n=ur("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return ar(t);case"captions":return wr.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(hi.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');hi.array(e)&&(this.options.quality=Wi(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!hi.empty(this.options.quality)&&this.options.quality.length>1;if(vr.toggleMenuButton.call(this,"quality",i),Ai(n),vr.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){vr.createMenuItem.call(t,{value:e,list:n,type:"quality",title:vr.getLabel.call(t,"quality",e),badge:function(e){var n=ur("qualityBadge.".concat(e),t.config);return n.length?vr.createBadge.call(t,n):null}(e)})}),vr.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(hi.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=wr.getTracks.call(this),i=Boolean(n.length);if(vr.toggleMenuButton.call(this,"captions",i),Ai(t),vr.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:wr.getLabel.call(e,n),badge:n.language&&vr.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:ur("disabled",this.config),list:t,type:"language"}),r.forEach(vr.createMenuItem.bind(this)),vr.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(hi.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');hi.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!hi.empty(this.options.speed)&&this.options.speed.length>1;vr.toggleMenuButton.call(this,"speed",i),Ai(n),vr.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){vr.createMenuItem.call(t,{value:e,list:n,type:"speed",title:vr.getLabel.call(t,"speed",e)})}),vr.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!hi.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Pi(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;hi.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');Oi.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(hi.element(t)&&hi.element(n)){var i=t.hidden,r=i;if(hi.boolean(e))r=e;else if(hi.keyboardEvent(e)&&27===e.which)r=!1;else if(hi.event(e)){var o=t.contains(e.target);if(o||!o&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),Pi(t,!r),Ci(this.elements.container,this.config.classNames.menu.open,r),r&&hi.keyboardEvent(e)?vr.focusFirstMenuItem.call(this,null,!0):r||i||Oi.call(this,n,hi.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Ei(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(hi.element(i)){var r=i.parentNode,o=Array.from(r.children).find(function(e){return!e.hidden});if(Hi.transitions&&!Hi.reducedMotion){r.style.width="".concat(o.scrollWidth,"px"),r.style.height="".concat(o.scrollHeight,"px");var a=vr.getMenuSize.call(this,i);mi.call(this,r,Fi,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",gi.call(e,r,Fi,t))}),r.style.width="".concat(a.width,"px"),r.style.height="".concat(a.height,"px")}Pi(o,!0),Pi(i,!1),vr.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;hi.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=wi("div",Si(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(vr.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(vr.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(vr.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(vr.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=wi("div",Si(this.config.selectors.progress));if(i.appendChild(vr.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(vr.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=wi("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(vr.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(vr.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var o=wi("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&o.appendChild(vr.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a={max:1,step:.05,value:this.config.volume};o.appendChild(vr.createRange.call(this,"volume",zi(a,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=o}n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(vr.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!hi.empty(this.config.settings)){var s=wi("div",{class:"plyr__menu",hidden:""});s.appendChild(vr.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=wi("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=wi("div"),u=wi("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=wi("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=wi("button",zi(Si(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));vr.bindMenuItemShortcuts.call(t,i,n),mi(i,"click",function(){vr.showMenuPanel.call(t,n,!1)});var r=wi("span",null,ur(n,t.config)),o=wi("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),d.appendChild(i);var a=wi("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),s=wi("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});s.appendChild(wi("span",{"aria-hidden":!0},ur(n,t.config))),s.appendChild(wi("span",{class:t.config.classNames.hidden},ur("menuBack",t.config))),mi(a,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),vr.showMenuPanel.call(t,"home",!0))},!1),mi(s,"click",function(){vr.showMenuPanel.call(t,"home",!1)}),a.appendChild(s),a.appendChild(wi("div",{role:"menu"})),c.appendChild(a),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=a}),l.appendChild(c),s.appendChild(l),n.appendChild(s),this.elements.settings.popup=l,this.elements.settings.menu=s}if(this.config.controls.includes("pip")&&Hi.pip&&n.appendChild(vr.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Hi.airplay&&n.appendChild(vr.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},f=this.config.urls.download;!hi.url(f)&&this.isEmbed&&zi(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(vr.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(vr.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(vr.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&vr.setQualityMenu.call(this,Ui.getQualityOptions.call(this)),vr.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=vr.getIconUrl.call(this);t.cors&&fr(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;hi.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this.props)),this.config.controls||(this.config.controls=[]),hi.element(this.config.controls)||hi.string(this.config.controls)?n=this.config.controls:(n=vr.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:wr.getLabel.call(this)}),r=!1);var o,a=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=nn(e,2),i=n[0],r=n[1];t=or(t,"{".concat(i,"}"),r)}),t};if(r&&(hi.string(this.config.controls)?n=a(n):hi.element(n)&&(n.innerHTML=a(n.innerHTML))),hi.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),hi.element(o)||(o=this.elements.container),o[hi.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),hi.element(this.elements.controls)||vr.findElements.call(this),!hi.empty(this.elements.buttons)){var s=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return Li(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Ci(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){hi.array(e)||hi.nodeList(e)?Array.from(e).filter(Boolean).forEach(s):s(e)})}if(window.navigator.userAgent.includes("Edge")&&Di(o),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=Ni.call(this,d);Array.from(h).forEach(function(t){Ci(t,e.config.classNames.hidden,!1),Ci(t,e.config.classNames.tooltip,!0)})}}};function br(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function kr(e){var t=new URLSearchParams;return hi.object(e)&&Object.entries(e).forEach(function(e){var n=nn(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var wr={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Hi.textTracks)hi.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&vr.setCaptionsMenu.call(this);else{var e,t;if(hi.element(this.elements.captions)||(this.elements.captions=wi("div",Si(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,hi.element(e)&&hi.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Vi.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=br(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&hr(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Ei(e)})})}var i=Wi((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=nn(i,1)[0];var o=this.storage.get("captions");if(hi.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:r,languages:i}),this.isHTML5){var a=this.config.captions.update?"addtrack removetrack":"removetrack";mi.call(this,this.media.textTracks,a,wr.update.bind(this))}setTimeout(wr.update.bind(this),0)}},update:function(){var e=this,t=wr.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,o=n.meta,a=n.currentTrackNode,s=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!o.get(e)}).forEach(function(t){e.debug.log("Track added",t),o.set(t,{default:"showing"===t.mode}),t.mode="hidden",mi.call(e,t,"cuechange",function(){return wr.updateCues.call(e)})}),(s&&this.language!==r||!t.includes(a))&&(wr.setLanguage.call(this,r),wr.toggle.call(this,i&&s)),Ci(this.elements.container,this.config.classNames.captions.enabled,!hi.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&vr.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=hi.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var o=wr.getTracks.call(this),a=wr.findTrack.call(this,[this.captions.language].concat(rn(this.captions.languages)),!0);return this.captions.language=a.language,void wr.set.call(this,o.indexOf(a))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),Ci(this.elements.container,i,r),this.captions.toggled=r,vr.updateSetting.call(this,"captions"),vi.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=wr.getTracks.call(this);if(-1!==e)if(hi.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,vr.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),vi.call(this,this.media,"languagechange")}wr.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&wr.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else wr.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(hi.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=wr.getTracks.call(this),r=wr.findTrack.call(this,[n]);wr.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=wr.getTracks.call(this),o=function(e){return Number((n.captions.meta.get(e)||{}).default)},a=Array.from(r).sort(function(e,t){return o(t)-o(e)});return e.every(function(e){return!(t=a.find(function(t){return t.language===e}))}),t||(i?a[0]:void 0)},getCurrentTrack:function(){return wr.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!hi.track(t)&&Hi.textTracks&&this.captions.toggled&&(t=wr.getCurrentTrack.call(this)),hi.track(t)?hi.empty(t.label)?hi.empty(t.language)?ur("enabled",this.config):e.language.toUpperCase():t.label:ur("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(hi.element(this.elements.captions))if(hi.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=wr.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(lr)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){Ai(this.elements.captions);var r=wi("span",Si(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),vi.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},Tr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.4.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","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"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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,publisherId:""}},Er="picture-in-picture",Ar="inline",_r={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Sr={audio:"audio",video:"video"};var Pr=function(){},Cr=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Xt(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return en(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Pr}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Pr}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Pr}}]),e}();function Lr(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;hi.element(e)&&(e.pressed=this.active),vi.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Vi.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(hi.element(e)){var n=Ni.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];pi.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function Mr(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",Ci(this.target,this.player.config.classNames.fullscreen.fallback,t),Vi.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=hi.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return Di(e.target)},100)}Lr.call(this)}var Nr=function(){function e(t){var n=this;Xt(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},mi.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){Lr.call(n)}),mi.call(this.player,this.player.elements.container,"dblclick",function(e){hi.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return en(e,[{key:"update",value:function(){this.enabled?this.player.debug.log("".concat(e.native?"Native":"Fallback"," fullscreen enabled")):this.player.debug.log("Fullscreen not supported and fallback disabled"),Ci(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Vi.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():e.native?this.prefix?hi.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen():Mr.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Vi.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!hi.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else Mr.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target:Li(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Vi.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(hi.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!hi.function(document["".concat(t,"ExitFullscreen")])&&!hi.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),xr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};function Or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})}S(S.S,"Math",{sign:xr});var jr={addStyleHook:function(){Ci(this.elements.container,this.config.selectors.container.replace(".",""),!0),Ci(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(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void jr.toggleNativeControls.call(this,!0);hi.element(this.elements.controls)||(vr.inject.call(this),this.listeners.controls()),jr.toggleNativeControls.call(this),this.isHTML5&&wr.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,vr.updateVolume.call(this),vr.timeUpdate.call(this),jr.checkPlaying.call(this),Ci(this.elements.container,this.config.classNames.pip.supported,Hi.pip&&this.isHTML5&&this.isVideo),Ci(this.elements.container,this.config.classNames.airplay.supported,Hi.airplay&&this.isHTML5),Ci(this.elements.container,this.config.classNames.isIos,Vi.isIos),Ci(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){vi.call(e,e.media,"ready")},0),jr.setTitle.call(this),this.poster&&jr.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&vr.durationUpdate.call(this)},setTitle:function(){var e=ur("play",this.config);if(hi.string(this.config.title)&&!hi.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=xi.call(this,"iframe");if(!hi.element(t))return;var n=hi.empty(this.config.title)?"video":this.config.title,i=ur("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Ci(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):mi.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return Or(e)}).catch(function(n){throw e===t.poster&&jr.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),jr.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;Ci(this.elements.container,this.config.classNames.playing,this.playing),Ci(this.elements.container,this.config.classNames.paused,this.paused),Ci(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),hi.event(e)&&"timeupdate"===e.type||jr.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Ci(t.elements.container,t.config.classNames.loading,t.loading),jr.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}},Ir=function(){function e(t){Xt(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return en(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,o=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&hi.number(i)){if(r){var a=document.activeElement;if(hi.element(a)){var s=t.config.selectors.editable;if(a!==n.inputs.seek&&Mi(a,s))return;if(32===e.which&&Mi(a,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:o||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:o||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:o||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===i&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){vr.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,Ci(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,Ci(Ni.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&Ci(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&pi.call(t,window,"keydown keyup",this.handleKey,e,!1),pi.call(t,document.body,"click",this.toggleMenu,e),yi.call(t,document.body,"touchstart",this.firstTouch),pi.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.elements;!e.config.keyboard.global&&e.config.keyboard.focused&&mi.call(e,t.container,"keydown keyup",this.handleKey,!1),mi.call(e,t.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(n){var i=t.controls;i&&"enterfullscreen"===n.type&&(i.pressed=!1,i.hover=!1);var r=0;["touchstart","touchmove","mousemove"].includes(n.type)&&(jr.toggleControls.call(e,!0),r=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return jr.toggleControls.call(e,!1)},r)})}},{key:"media",value:function(){var e=this.player,t=e.elements;if(mi.call(e,e.media,"timeupdate seeking seeked",function(t){return vr.timeUpdate.call(e,t)}),mi.call(e,e.media,"durationchange loadeddata loadedmetadata",function(t){return vr.durationUpdate.call(e,t)}),mi.call(e,e.media,"canplay loadeddata",function(){Pi(t.volume,!e.hasAudio),Pi(t.buttons.mute,!e.hasAudio)}),mi.call(e,e.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&e.restart()}),mi.call(e,e.media,"progress playing seeking seeked",function(t){return vr.updateProgress.call(e,t)}),mi.call(e,e.media,"volumechange",function(t){return vr.updateVolume.call(e,t)}),mi.call(e,e.media,"playing play pause ended emptied timeupdate",function(t){return jr.checkPlaying.call(e,t)}),mi.call(e,e.media,"waiting canplay seeked playing",function(t){return jr.checkLoading.call(e,t)}),mi.call(e,e.media,"playing",function(){e.ads&&e.ads.enabled&&!e.ads.initialized&&e.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.play()})}),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){var n=xi.call(e,".".concat(e.config.classNames.video));if(!hi.element(n))return;mi.call(e,t.container,"click",function(i){([t.container,n].includes(i.target)||n.contains(i.target))&&(e.touch&&e.config.hideControls||(e.ended?(e.restart(),e.play()):e.togglePlay()))})}e.supported.ui&&e.config.disableContextMenu&&mi.call(e,t.wrapper,"contextmenu",function(e){e.preventDefault()},!1),mi.call(e,e.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),mi.call(e,e.media,"ratechange",function(){vr.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),mi.call(e,e.media,"qualitychange",function(t){vr.updateSetting.call(e,"quality",null,t.detail.quality)}),mi.call(e,e.media,"ready qualitychange",function(){vr.setDownloadLink.call(e)});var i=e.config.events.concat(["keyup","keydown"]).join(" ");mi.call(e,e.media,i,function(n){var i=n.detail,r=void 0===i?{}:i;"error"===n.type&&(r=e.media.error),vi.call(e,t.container,n.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],o=!0;hi.function(r)&&(o=r.call(i,e)),o&&hi.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=this.player,s=a.config.listeners[i],l=hi.function(s);mi.call(a,e,t,function(e){return r.proxy(e,n,i)},o&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=Vi.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){vi.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),vr.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),vr.toggleMenu.call(t,e)):vr.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&vr.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!hi.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),o=["mouseup","touchend","keyup"].includes(e.type);r&&o?(n.removeAttribute("play-on-seeked"),t.play()):!o&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),Vi.isIos){var r=Ni.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return Di(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");hi.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return vr.updateSeekTooltip.call(t,e)}),Vi.isWebkit&&Array.from(Ni.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return vr.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!hi.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,vr.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;Ci(i.controls,n.classNames.noTransition,!0),jr.toggleControls.call(t,!0),setTimeout(function(){Ci(i.controls,n.classNames.noTransition,!1)},0);var o=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return jr.toggleControls.call(t,!1)},o)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=nn([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],o=i[1],a=Math.sign(Math.abs(r)>Math.abs(o)?r:o);t.increaseVolume(a/50);var s=t.media.volume;(1===a&&s<1||-1===a&&s>0)&&e.preventDefault()},"volume",!1)}}]),e}(),Rr=g.f,Fr=Function.prototype,Dr=/^\s*function ([^ (]*)/;"name"in Fr||c&&Rr(Fr,"name",{configurable:!0,get:function(){try{return(""+this).match(Dr)[1]}catch(e){return""}}}),at("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var qr=t(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s}()});function Vr(e){return new Promise(function(t,n){qr(e,{success:t,error:n})})}function Br(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,vi.call(this,this.media,e?"play":"pause"))}var Hr={setup:function(){var e=this;Ci(this.elements.wrapper,this.config.classNames.embed,!0),Hr.setAspectRatio.call(this),hi.object(window.Vimeo)?Hr.ready.call(this):Vr(this.config.urls.vimeo.sdk).then(function(){Hr.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=nn((hi.string(e)?e:this.config.ratio).split(":").map(Number),2),n=100/t[0]*t[1];if(Hr.padding=n,this.elements.wrapper.style.paddingBottom="".concat(n,"%"),this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-".concat(i,"%)")}},ready:function(){var e=this,t=this,n=kr({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");hi.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var r,o=(r=i,hi.empty(r)?null:hi.number(Number(r))?r:r.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:r),a=wi("iframe"),s=rr(t.config.urls.vimeo.iframe,o,n);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=wi("div",{poster:t.poster,class:t.config.classNames.embedContainer});l.appendChild(a),t.media=_i(l,t.media),hr(rr(t.config.urls.vimeo.api,o),"json").then(function(e){if(!hi.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname="".concat(n.pathname.split("_")[0],".jpg"),jr.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Br.call(t,!0),t.embed.play()},t.media.pause=function(){return Br.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume,a=r&&!n.hasPlayed;i.seeking=!0,vi.call(t,i,"seeking"),Promise.resolve(a&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return a&&n.pause()}).then(function(){return a&&n.setVolume(o)}).catch(function(){})}});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,vi.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&vr.setSpeedMenu.call(t,[])})}});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,vi.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!hi.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,vi.call(t,t.media,"volumechange")})}});var f,p=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return p},set:function(e){var n=hi.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){p=n})}}),t.embed.getVideoUrl().then(function(e){f=e,vr.setDownloadLink.call(t)}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return f}}),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,i,r;Hr.ratio=(n=t[0],i=t[1],r=function e(t,n){return 0===n?t:e(n,t%n)}(n,i),"".concat(n/r,":").concat(i/r)),Hr.setAspectRatio.call(e,Hr.ratio)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,jr.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,vi.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,vi.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,wr.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});wr.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Br.call(t,!e),e||vi.call(t,t.media,"playing")}),hi.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Br.call(t,!0),vi.call(t,t.media,"playing")}),t.embed.on("pause",function(){Br.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,vi.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,vi.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&vi.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,vi.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,vi.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,vi.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,vi.call(t,t.media,"error")}),t.on("enterfullscreen exitfullscreen",function(e){var n=t.fullscreen.target;if(n===t.elements.container){var i="enterfullscreen"===e.type,r=nn(Hr.ratio.split(":").map(Number),2),o=r[0]>r[1]?"width":"height";n.style[o]=i?"".concat(Hr.padding,"%"):null}}),setTimeout(function(){return jr.build.call(t)},0)}};function Ur(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,vi.call(this,this.media,e?"play":"pause"))}var Wr,Kr={setup:function(){var e=this;Ci(this.elements.wrapper,this.config.classNames.embed,!0),Kr.setAspectRatio.call(this),hi.object(window.YT)&&hi.function(window.YT.Player)?Kr.ready.call(this):(Vr(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Kr.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(hi.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(hi.empty(n))return this.config.title=n,void jr.setTitle.call(this)}var i=this.config.keys.google;hi.string(i)&&!hi.empty(i)&&hr(rr(this.config.urls.youtube.api,e,i)).then(function(e){hi.object(e)&&(t.config.title=e.items[0].snippet.title,jr.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom="".concat(100/e[0]*e[1],"%")},ready:function(){var e=this,t=e.media.getAttribute("id");if(hi.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");hi.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,r,o=(i=n,hi.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),a=(r=e.provider,"".concat(r,"-").concat(Math.floor(1e4*Math.random()))),s=wi("div",{id:a,poster:e.poster});e.media=_i(s,e.media);var l=function(e){return"https://img.youtube.com/vi/".concat(o,"/").concat(e,"default.jpg")};Or(l("maxres"),121).catch(function(){return Or(l("sd"),121)}).catch(function(){return Or(l("hq"))}).then(function(t){return jr.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(a,{videoId:o,playerVars:{autoplay:e.config.autoplay?1:0,hl:e.config.hl,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(!e.media.error){var n=t.data,i={2:"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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},vi.call(e,e.media,"error")}},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),vi.call(e,e.media,"ratechange")},onReady:function(t){if(!hi.function(e.media.play)){var n=t.target;Kr.getTitle.call(e,o),e.media.play=function(){Ur.call(e,!0),n.playVideo()},e.media.pause=function(){Ur.call(e,!1),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.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,vi.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),vi.call(e,e.media,"volumechange")}});var r=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return r},set:function(t){var i=hi.boolean(t)?t:r;r=i,n[i?"mute":"unMute"](),vi.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),vi.call(e,e.media,"timeupdate"),vi.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&vi.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),vi.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return jr.build.call(e)},50)}},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,vi.call(e,e.media,"seeked")),t.data){case-1:vi.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),vi.call(e,e.media,"progress");break;case 0:Ur.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):vi.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(Ur.call(e,!0),vi.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){vi.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),vi.call(e,e.media,"durationchange")));break;case 2:e.muted||e.embed.unMute(),Ur.call(e,!1)}vi.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},zr={setup:function(){this.media?(Ci(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Ci(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Ci(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=wi("div",{class:this.config.classNames.video}),bi(this.media,this.elements.wrapper),this.elements.poster=wi("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?Ui.extend.call(this):this.isYouTube?Kr.setup.call(this):this.isVimeo&&Hr.setup.call(this)):this.debug.warn("No media element found!")}},Yr=function(){function e(t){var n=this;Xt(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return en(e,[{key:"load",value:function(){var e=this;this.enabled&&(hi.object(window.google)&&hi.object(window.google.ima)?this.ready():Vr(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=wi("div",{class:this.player.config.classNames.ads}),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=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=yr(Math.max(e.manager.getRemainingTime(),0)),n="".concat(ur("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),hi.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(hi.element(n)){var i=100/t.player.duration*e,r=wi("span",{class:t.player.config.classNames.cues});r.style.left="".concat(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.trigger("loaded")}}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads".concat(e.replace(/_/g,"").toLowerCase());vi.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e,t=this,n=this.player.elements.container;this.player.on("ended",function(){t.loader.contentComplete()}),this.player.on("seeking",function(){return e=t.player.currentTime}),this.player.on("seeked",function(){var n=t.player.currentTime;hi.empty(t.cuePoints)||t.cuePoints.forEach(function(i,r){e<i&&i<n&&(t.manager.discardAdBreak(),t.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){t.manager&&t.manager.resize(n.offsetWidth,n.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),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)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("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("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];hi.array(o)&&o.forEach(function(e){hi.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return hi.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: ".concat(t)),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){hi.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: ".concat(e)),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!hi.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"".concat("https://go.aniview.com/api/adserver6/vast/","?").concat(kr(e))}}]),e}(),Gr={insertElements:function(e,t){var n=this;hi.string(t)?Ti(e,this.media,{src:t}):hi.array(t)&&t.forEach(function(t){Ti(e,n.media,t)})},change:function(e){var t=this;Ki(e,"sources.length")?(Ui.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],Ei(t.media),t.media=null,hi.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=nn(n,1)[0],o=r.provider,a=void 0===o?_r.html5:o,s=r.src,l="html5"===a?i:"div",c="html5"===a?{}:{src:s};Object.assign(t,{provider:a,type:i,supported:Hi.check(i,a,t.config.playsinline),media:wi(l,c)}),t.elements.container.appendChild(t.media),hi.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),hi.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),jr.addStyleHook.call(t),t.isHTML5&&Gr.insertElements.call(t,"source",n),t.config.title=e.title,zr.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&Gr.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&jr.build.call(t),t.isHTML5&&t.media.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},$r=function(){function e(t,n){var i=this;if(Xt(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Hi.touch,this.media=t,hi.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||hi.nodeList(this.media)||hi.array(this.media))&&(this.media=this.media[0]),this.config=zi({},Tr,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Cr(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Hi),!hi.nullOrUndefined(this.media)&&hi.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Hi.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),hi.element(a)){if(s=br(a.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_r.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?_r.vimeo:null}(s.toString()),this.elements.container=this.media,this.media=a,this.elements.container.className="",s.search.length){var l=["1","true"];l.includes(s.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(s.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(s.searchParams.get("playsinline")),this.config.hl=s.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(hi.empty(this.provider)||!Object.keys(_r).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Sr.video;break;case"video":case"audio":this.type=o,this.provider=_r.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!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=Hi.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new Ir(this),this.storage=new dr(this),this.media.plyr=this,hi.element(this.elements.container)||(this.elements.container=wi("div"),bi(this.media,this.elements.container)),jr.addStyleHook.call(this),zr.setup.call(this),this.config.debug&&mi.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&jr.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new Nr(this),this.config.ads.enabled&&(this.ads=new Yr(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0):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 en(e,[{key:"play",value:function(){return hi.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&hi.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(hi.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):hi.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(hi.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(hi.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(hi.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){wr.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Hi.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Li(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Ci(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!hi.empty(this.config.settings)&&vr.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";vi.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){mi.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){yi.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){gi(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Ei(t.elements.buttons.play),Ei(t.elements.captions),Ei(t.elements.controls),Ei(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),hi.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),_i(t.elements.original,t.elements.container),vi.call(t,t.elements.original,"destroyed",!0),hi.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),jr.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&hi.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Hi.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===_r.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===_r.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===_r.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Sr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Sr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=hi.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return hi.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=hi.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;hi.string(t)&&(t=Number(t)),hi.number(t)||(t=this.storage.get("volume")),hi.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!hi.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;hi.boolean(t)||(t=this.storage.get("muted")),hi.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;hi.number(e)&&(t=e),hi.number(t)||(t=this.storage.get("speed")),hi.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!hi.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(hi.number),r=!0;if(!n.includes(i)){var o=function(e,t){return hi.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: ".concat(i,", using ").concat(o," instead")),i=o,r=!1}t.selected=i,this.media.quality=i,r&&this.storage.set({quality:i})}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=hi.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Gr.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"download",get:function(){var e=this.config.urls.download;return hi.url(e)?e:this.source}},{key:"poster",set:function(e){this.isVideo?jr.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=hi.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){wr.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){wr.setLanguage.call(this,e,!1)},get:function(){return(wr.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){if(Hi.pip){var t=hi.boolean(e)?e:!this.pip;hi.function(this.media.webkitSetPresentationMode)&&this.media.webkitSetPresentationMode(t?Er:Ar),hi.function(this.media.requestPictureInPicture)&&(!this.pip&&t?this.media.requestPictureInPicture():this.pip&&!t&&document.exitPictureInPicture())}},get:function(){return Hi.pip?hi.empty(this.media.webkitPresentationMode)?this.media===document.pictureInPictureElement:this.media.webkitPresentationMode===Er:null}}],[{key:"supported",value:function(e,t,n){return Hi.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return fr(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return hi.string(t)?i=Array.from(document.querySelectorAll(t)):hi.nodeList(t)?i=Array.from(t):hi.array(t)&&(i=t.filter(hi.element)),hi.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return $r.defaults=(Wr=Tr,JSON.parse(JSON.stringify(Wr))),$r});
+"object"==typeof navigator&&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";!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=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};t.prototype=window.Event.prototype,window.CustomEvent=t}}();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}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{writable:!0,value:{}}),"string"==typeof e)""!==e&&this._fromString(e);else if(e instanceof o){var t=this;e.forEach(function(e,n){t.append(n,e)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e=[];return this.forEach(function(t,n){e.push(i(n)+"="+i(t))}),e.join("&")},Object.defineProperty(a,"_fromString",{enumerable:!1,configurable:!1,writable:!1,value:function(e){this._entries={};for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}}),e.URLSearchParams=o}(),"function"!=typeof URLSearchParams.prototype.sort&&(URLSearchParams.prototype.sort=function(){var e=this,t=[];this.forEach(function(n,i){t.push([i,n]),e._entries||e.delete(i)}),t.sort(function(e,t){return e[0]<t[0]?-1:e[0]>t[0]?1:0}),e._entries&&(e._entries={});for(var n=0;n<t.length;n++)this.append(t[n][0],t[n][1])})}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t));var i,r=document;if(n&&(void 0===e.location||n!==e.location.href)){(i=(r=document.implementation.createHTMLDocument("")).createElement("base")).href=n,r.head.appendChild(i);try{if(0!==i.href.indexOf(n))throw new Error(i.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var o=r.createElement("a");if(o.href=t,i&&(r.body.appendChild(o),o.href=o.href),":"===o.protocol||!/:/.test(o.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:o});var a=new URLSearchParams(this.search),s=!0,l=!0,c=this;["append","delete","set"].forEach(function(e){var t=a[e];a[e]=function(){t.apply(a,arguments),s&&(l=!1,c.search=a.toString(),l=!0)}}),Object.defineProperty(this,"searchParams",{value:a,enumerable:!0});var u=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==u&&(u=this.search,l&&(s=!1,this.searchParams._fromString(this.search),s=!0))}})},i=n.prototype;["hash","host","hostname","port","protocol"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperty(i,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var n=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},i=function(e,t,i){if(n(e),void 0===t)return e;switch(i){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)}},r=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)}),o=t(function(e){var t=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=t)}),a=(o.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),s=function(e){if(!a(e))throw TypeError(e+" is not an object!");return e},l=function(e){try{return!!e()}catch(e){return!0}},c=!l(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),u=r.document,d=a(u)&&a(u.createElement),h=function(e){return d?u.createElement(e):{}},f=!c&&!l(function(){return 7!=Object.defineProperty(h("div"),"a",{get:function(){return 7}}).a}),p=function(e,t){if(!a(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!a(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!a(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!a(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},m=Object.defineProperty,g={f:c?Object.defineProperty:function(e,t,n){if(s(e),t=p(t,!0),s(n),f)try{return m(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}},y=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},v=c?function(e,t,n){return g.f(e,t,y(1,n))}:function(e,t,n){return e[t]=n,e},b={}.hasOwnProperty,k=function(e,t){return b.call(e,t)},w=0,T=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++w+T).toString(36))},A=t(function(e){var t=E("src"),n=Function.toString,i=(""+n).split("toString");o.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,o,a){var s="function"==typeof o;s&&(k(o,"name")||v(o,"name",n)),e[n]!==o&&(s&&(k(o,t)||v(o,t,e[n]?""+e[n]:i.join(String(n)))),e===r?e[n]=o:a?e[n]?e[n]=o:v(e,n,o):(delete e[n],v(e,n,o)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),_=function(e,t,n){var a,s,l,c,u=e&_.F,d=e&_.G,h=e&_.S,f=e&_.P,p=e&_.B,m=d?r:h?r[t]||(r[t]={}):(r[t]||{}).prototype,g=d?o:o[t]||(o[t]={}),y=g.prototype||(g.prototype={});for(a in d&&(n=t),n)l=((s=!u&&m&&void 0!==m[a])?m:n)[a],c=p&&s?i(l,r):f&&"function"==typeof l?i(Function.call,l):l,m&&A(m,a,l,e&_.U),g[a]!=l&&v(g,a,c),f&&y[a]!=l&&(y[a]=l)};r.core=o,_.F=1,_.G=2,_.S=4,_.P=8,_.B=16,_.W=32,_.U=64,_.R=128;var S=_,P=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},C=function(e){return Object(P(e))},L=function(e,t,n,i){try{return i?t(s(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&s(r.call(e)),t}},M={},N=t(function(e){var t=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,n){return t[e]||(t[e]=void 0!==n?n:{})})("versions",[]).push({version:o.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})}),x=t(function(e){var t=N("wks"),n=r.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:E)("Symbol."+e))}).store=t}),O=x("iterator"),j=Array.prototype,I=function(e){return void 0!==e&&(M.Array===e||j[O]===e)},R=Math.ceil,F=Math.floor,D=function(e){return isNaN(e=+e)?0:(e>0?F:R)(e)},q=Math.min,V=function(e){return e>0?q(D(e),9007199254740991):0},B=function(e,t,n){t in e?g.f(e,t,y(0,n)):e[t]=n},H={}.toString,U=function(e){return H.call(e).slice(8,-1)},W=x("toStringTag"),K="Arguments"==U(function(){return arguments}()),z=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),W))?n:K?U(t):"Object"==(i=U(t))&&"function"==typeof t.callee?"Arguments":i},Y=x("iterator"),G=o.getIteratorMethod=function(e){if(null!=e)return e[Y]||e["@@iterator"]||M[z(e)]},$=x("iterator"),J=!1;try{[7][$]().return=function(){J=!0}}catch(e){}var Q=function(e,t){if(!t&&!J)return!1;var n=!1;try{var i=[7],r=i[$]();r.next=function(){return{done:n=!0}},i[$]=function(){return r},e(i)}catch(e){}return n};S(S.S+S.F*!Q(function(e){}),"Array",{from:function(e){var t,n,r,o,a=C(e),s="function"==typeof this?this:Array,l=arguments.length,c=l>1?arguments[1]:void 0,u=void 0!==c,d=0,h=G(a);if(u&&(c=i(c,l>2?arguments[2]:void 0,2)),null==h||s==Array&&I(h))for(n=new s(t=V(a.length));t>d;d++)B(n,d,u?c(a[d],d):a[d]);else for(o=h.call(a),n=new s;!(r=o.next()).done;d++)B(n,d,u?L(o,c,[r.value,d],!0):r.value);return n.length=d,n}});var X=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==U(e)?e.split(""):Object(e)},Z=Array.isArray||function(e){return"Array"==U(e)},ee=x("species"),te=function(e,t){return new(function(e){var t;return Z(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Z(t.prototype)||(t=void 0),a(t)&&null===(t=t[ee])&&(t=void 0)),void 0===t?Array:t}(e))(t)},ne=function(e,t){var n=1==e,r=2==e,o=3==e,a=4==e,s=6==e,l=5==e||s,c=t||te;return function(t,u,d){for(var h,f,p=C(t),m=X(p),g=i(u,d,3),y=V(m.length),v=0,b=n?c(t,y):r?c(t,0):void 0;y>v;v++)if((l||v in m)&&(f=g(h=m[v],v,p),e))if(n)b[v]=f;else if(f)switch(e){case 3:return!0;case 5:return h;case 6:return v;case 2:b.push(h)}else if(a)return!1;return s?-1:o||a?a:b}},ie=x("unscopables"),re=Array.prototype;null==re[ie]&&v(re,ie,{});var oe=function(e){re[ie][e]=!0},ae=ne(5),se=!0;"find"in[]&&Array(1).find(function(){se=!1}),S(S.P+S.F*se,"Array",{find:function(e){return ae(this,e,arguments.length>1?arguments[1]:void 0)}}),oe("find");var le={f:{}.propertyIsEnumerable},ce=function(e){return X(P(e))},ue=Object.getOwnPropertyDescriptor,de={f:c?ue:function(e,t){if(e=ce(e),t=p(t,!0),f)try{return ue(e,t)}catch(e){}if(k(e,t))return y(!le.f.call(e,t),e[t])}},he=function(e,t){if(s(e),!a(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},fe={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=i(Function.call,de.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return he(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:he}.set,pe=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&a(i)&&fe&&fe(e,i),e},me=Math.max,ge=Math.min,ye=function(e){return function(t,n,i){var r,o=ce(t),a=V(o.length),s=function(e,t){return(e=D(e))<0?me(e+t,0):ge(e,t)}(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},ve=N("keys"),be=function(e){return ve[e]||(ve[e]=E(e))},ke=ye(!1),we=be("IE_PROTO"),Te=function(e,t){var n,i=ce(e),r=0,o=[];for(n in i)n!=we&&k(i,n)&&o.push(n);for(;t.length>r;)k(i,n=t[r++])&&(~ke(o,n)||o.push(n));return o},Ee="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),Ae=Ee.concat("length","prototype"),_e={f:Object.getOwnPropertyNames||function(e){return Te(e,Ae)}},Se="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",Pe="["+Se+"]",Ce=RegExp("^"+Pe+Pe+"*"),Le=RegExp(Pe+Pe+"*$"),Me=function(e,t,n){var i={},r=l(function(){return!!Se[e]()||"​…"!="​…"[e]()}),o=i[e]=r?t(Ne):Se[e];n&&(i[n]=o),S(S.P+S.F*r,"String",i)},Ne=Me.trim=function(e,t){return e=String(P(e)),1&t&&(e=e.replace(Ce,"")),2&t&&(e=e.replace(Le,"")),e},xe=Me,Oe=Object.keys||function(e){return Te(e,Ee)},je=c?Object.defineProperties:function(e,t){s(e);for(var n,i=Oe(t),r=i.length,o=0;r>o;)g.f(e,n=i[o++],t[n]);return e},Ie=r.document,Re=Ie&&Ie.documentElement,Fe=be("IE_PROTO"),De=function(){},qe=function(){var e,t=h("iframe"),n=Ee.length;for(t.style.display="none",Re.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[Ee[n]];return qe()},Ve=Object.create||function(e,t){var n;return null!==e?(De.prototype=s(e),n=new De,De.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:je(n,t)},Be=_e.f,He=de.f,Ue=g.f,We=xe.trim,Ke=r.Number,ze=Ke,Ye=Ke.prototype,Ge="Number"==U(Ve(Ye)),$e="trim"in String.prototype,Je=function(e){var t=p(e,!1);if("string"==typeof t&&t.length>2){var n,i,r,o=(t=$e?t.trim():We(t,3)).charCodeAt(0);if(43===o||45===o){if(88===(n=t.charCodeAt(2))||120===n)return NaN}else if(48===o){switch(t.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+t}for(var a,s=t.slice(2),l=0,c=s.length;l<c;l++)if((a=s.charCodeAt(l))<48||a>r)return NaN;return parseInt(s,i)}}return+t};if(!Ke(" 0o1")||!Ke("0b1")||Ke("+0x1")){Ke=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof Ke&&(Ge?l(function(){Ye.valueOf.call(n)}):"Number"!=U(n))?pe(new ze(Je(t)),n,Ke):Je(t)};for(var Qe,Xe=c?Be(ze):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),Ze=0;Xe.length>Ze;Ze++)k(ze,Qe=Xe[Ze])&&!k(Ke,Qe)&&Ue(Ke,Qe,He(ze,Qe));Ke.prototype=Ye,Ye.constructor=Ke,A(r,"Number",Ke)}!function(e,t){var n=(o.Object||{})[e]||Object[e],i={};i[e]=t(n),S(S.S+S.F*l(function(){n(1)}),"Object",i)}("keys",function(){return function(e){return Oe(C(e))}});var et=x("match"),tt=function(e){var t;return a(e)&&(void 0!==(t=e[et])?!!t:"RegExp"==U(e))},nt=function(e,t,n){if(tt(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(P(e))},it=x("match"),rt=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[it]=!1,!"/./"[e](t)}catch(e){}}return!0};S(S.P+S.F*rt("includes"),"String",{includes:function(e){return!!~nt(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var ot=ye(!0);S(S.P,"Array",{includes:function(e){return ot(this,e,arguments.length>1?arguments[1]:void 0)}}),oe("includes");var at=function(e,t,n){var i=x(e),r=n(P,i,""[e]),o=r[0],a=r[1];l(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(A(String.prototype,e,o),v(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};at("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var st=function(){var e=s(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t};c&&"g"!=/./g.flags&&g.f(RegExp.prototype,"flags",{configurable:!0,get:st});var lt=/./.toString,ct=function(e){A(RegExp.prototype,"toString",e,!0)};l(function(){return"/a/b"!=lt.call({source:"a",flags:"b"})})?ct(function(){var e=s(this);return"/".concat(e.source,"/","flags"in e?e.flags:!c&&e instanceof RegExp?st.call(e):void 0)}):"toString"!=lt.name&&ct(function(){return lt.call(this)});var ut=function(e,t){return{value:t,done:!!e}},dt=g.f,ht=x("toStringTag"),ft=function(e,t,n){e&&!k(e=n?e:e.prototype,ht)&&dt(e,ht,{configurable:!0,value:t})},pt={};v(pt,x("iterator"),function(){return this});var mt=function(e,t,n){e.prototype=Ve(pt,{next:y(1,n)}),ft(e,t+" Iterator")},gt=be("IE_PROTO"),yt=Object.prototype,vt=Object.getPrototypeOf||function(e){return e=C(e),k(e,gt)?e[gt]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?yt:null},bt=x("iterator"),kt=!([].keys&&"next"in[].keys()),wt=function(){return this},Tt=function(e,t,n,i,r,o,a){mt(n,t,i);var s,l,c,u=function(e){if(!kt&&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",h="values"==r,f=!1,p=e.prototype,m=p[bt]||p["@@iterator"]||r&&p[r],g=m||u(r),y=r?h?u("entries"):g:void 0,b="Array"==t&&p.entries||m;if(b&&(c=vt(b.call(new e)))!==Object.prototype&&c.next&&(ft(c,d,!0),"function"!=typeof c[bt]&&v(c,bt,wt)),h&&m&&"values"!==m.name&&(f=!0,g=function(){return m.call(this)}),(kt||f||!p[bt])&&v(p,bt,g),M[t]=g,M[d]=wt,r)if(s={values:h?g:u("values"),keys:o?g:u("keys"),entries:y},a)for(l in s)l in p||A(p,l,s[l]);else S(S.P+S.F*(kt||f),t,s);return s},Et=Tt(Array,"Array",function(e,t){this._t=ce(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,ut(1)):ut(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");M.Arguments=M.Array,oe("keys"),oe("values"),oe("entries");for(var At=x("iterator"),_t=x("toStringTag"),St=M.Array,Pt={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},Ct=Oe(Pt),Lt=0;Lt<Ct.length;Lt++){var Mt,Nt=Ct[Lt],xt=Pt[Nt],Ot=r[Nt],jt=Ot&&Ot.prototype;if(jt&&(jt[At]||v(jt,At,St),jt[_t]||v(jt,_t,Nt),M[Nt]=St,xt))for(Mt in Et)jt[Mt]||A(jt,Mt,Et[Mt],!0)}var It=function(e){return function(t,n){var i,r,o=String(P(t)),a=D(n),s=o.length;return a<0||a>=s?e?"":void 0:(i=o.charCodeAt(a))<55296||i>56319||a+1===s||(r=o.charCodeAt(a+1))<56320||r>57343?e?o.charAt(a):i:e?o.slice(a,a+2):r-56320+(i-55296<<10)+65536}}(!0);Tt(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=It(t,n),this._i+=e.length,{value:e,done:!1})});var Rt=t(function(e){var t=E("meta"),n=g.f,i=0,r=Object.isExtensible||function(){return!0},o=!l(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!k(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!k(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&c.NEED&&r(e)&&!k(e,t)&&s(e),e}}}),Ft=(Rt.KEY,Rt.NEED,Rt.fastKey,Rt.getWeak,Rt.onFreeze,{f:Object.getOwnPropertySymbols}),Dt=Object.assign,qt=!Dt||l(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Dt({},e)[n]||Object.keys(Dt({},t)).join("")!=i})?function(e,t){for(var n=C(e),i=arguments.length,r=1,o=Ft.f,a=le.f;i>r;)for(var s,l=X(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,d=0;u>d;)a.call(l,s=c[d++])&&(n[s]=l[s]);return n}:Dt,Vt=function(e,t,n){for(var i in t)A(e,i,t[i],n);return e},Bt=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ht=t(function(e){var t={},n={},r=e.exports=function(e,r,o,a,l){var c,u,d,h,f=l?function(){return e}:G(e),p=i(o,a,r?2:1),m=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(I(f)){for(c=V(e.length);c>m;m++)if((h=r?p(s(u=e[m])[0],u[1]):p(e[m]))===t||h===n)return h}else for(d=f.call(e);!(u=d.next()).done;)if((h=L(d,p,u.value,r))===t||h===n)return h};r.BREAK=t,r.RETURN=n}),Ut=function(e,t){if(!a(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},Wt=Rt.getWeak,Kt=ne(5),zt=ne(6),Yt=0,Gt=function(e){return e._l||(e._l=new $t)},$t=function(){this.a=[]},Jt=function(e,t){return Kt(e.a,function(e){return e[0]===t})};$t.prototype={get:function(e){var t=Jt(this,e);if(t)return t[1]},has:function(e){return!!Jt(this,e)},set:function(e,t){var n=Jt(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=zt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Qt={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=Yt++,e._l=void 0,null!=o&&Ht(o,n,e[i],e)});return Vt(r.prototype,{delete:function(e){if(!a(e))return!1;var n=Wt(e);return!0===n?Gt(Ut(this,t)).delete(e):n&&k(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=Wt(e);return!0===n?Gt(Ut(this,t)).has(e):n&&k(n,this._i)}}),r},def:function(e,t,n){var i=Wt(s(t),!0);return!0===i?Gt(e).set(t,n):i[e._i]=n,e},ufstore:Gt};t(function(e){var t,n=ne(0),i=Rt.getWeak,o=Object.isExtensible,s=Qt.ufstore,c={},u=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},d={get:function(e){if(a(e)){var t=i(e);return!0===t?s(Ut(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Qt.def(Ut(this,"WeakMap"),e,t)}},h=e.exports=function(e,t,n,i,o,s){var c=r[e],u=c,d=o?"set":"add",h=u&&u.prototype,f={},p=function(e){var t=h[e];A(h,e,"delete"==e?function(e){return!(s&&!a(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(s&&!a(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return s&&!a(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&&(s||h.forEach&&!l(function(){(new u).entries().next()}))){var m=new u,g=m[d](s?{}:-0,1)!=m,y=l(function(){m.has(1)}),v=Q(function(e){new u(e)}),b=!s&&l(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});v||((u=t(function(t,n){Bt(t,u,e);var i=pe(new c,t,u);return null!=n&&Ht(n,o,i[d],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),o&&p("get")),(b||g)&&p(d),s&&h.clear&&delete h.clear}else u=i.getConstructor(t,e,o,d),Vt(u.prototype,n),Rt.NEED=!0;return ft(u,e),f[e]=u,S(S.G+S.W+S.F*(u!=c),f),s||i.setStrong(u,e,o),u}("WeakMap",u,d,Qt,!0,!0);l(function(){return 7!=(new h).set((Object.freeze||Object)(c),7).get(c)})&&(t=Qt.getConstructor(u,"WeakMap"),qt(t.prototype,d),Rt.NEED=!0,n(["delete","has","get","set"],function(e){var n=h.prototype,i=n[e];A(n,e,function(n,r){if(a(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,r);return"set"==e?this:s}return i.call(this,n,r)})}))});function Xt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zt(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)}}function en(e,t,n){return t&&Zt(e.prototype,t),n&&Zt(e,n),e}function tn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function rn(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}S(S.S+S.F,"Object",{assign:qt}),at("split",2,function(e,t,n){var i=tt,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 a=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 s,l,c,u,d,h=[],f=(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,f+"g");for(a||(s=new RegExp("^"+g.source+"$(?!\\s)",f));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,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(h,l.slice(1)),u=l[0].length,p=c,h.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||h.push(""):h.push(n.slice(p)),h.length>m?h.slice(0,m):h}}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),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]});var on=le.f,an=function(e){return function(t){for(var n,i=ce(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)on.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},sn=an(!0);S(S.S,"Object",{entries:function(e){return sn(e)}});var ln=an(!1);S(S.S,"Object",{values:function(e){return ln(e)}}),at("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]});var cn,un,dn,hn=x("species"),fn=r.process,pn=r.setImmediate,mn=r.clearImmediate,gn=r.MessageChannel,yn=r.Dispatch,vn=0,bn={},kn=function(){var e=+this;if(bn.hasOwnProperty(e)){var t=bn[e];delete bn[e],t()}},wn=function(e){kn.call(e.data)};pn&&mn||(pn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return bn[++vn]=function(){!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])}e.apply(n,t)}("function"==typeof e?e:Function(e),t)},cn(vn),vn},mn=function(e){delete bn[e]},"process"==U(fn)?cn=function(e){fn.nextTick(i(kn,e,1))}:yn&&yn.now?cn=function(e){yn.now(i(kn,e,1))}:gn?(dn=(un=new gn).port2,un.port1.onmessage=wn,cn=i(dn.postMessage,dn,1)):r.addEventListener&&"function"==typeof postMessage&&!r.importScripts?(cn=function(e){r.postMessage(e+"","*")},r.addEventListener("message",wn,!1)):cn="onreadystatechange"in h("script")?function(e){Re.appendChild(h("script")).onreadystatechange=function(){Re.removeChild(this),kn.call(e)}}:function(e){setTimeout(i(kn,e,1),0)});var Tn={set:pn,clear:mn},En=Tn.set,An=r.MutationObserver||r.WebKitMutationObserver,_n=r.process,Sn=r.Promise,Pn="process"==U(_n);function Cn(e){var t,i;this.promise=new e(function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n}),this.resolve=n(t),this.reject=n(i)}var Ln,Mn,Nn,xn,On={f:function(e){return new Cn(e)}},jn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},In=r.navigator,Rn=In&&In.userAgent||"",Fn=x("species"),Dn=function(e){var t=r[e];c&&t&&!t[Fn]&&g.f(t,Fn,{configurable:!0,get:function(){return this}})},qn=Tn.set,Vn=function(){var e,t,n,i=function(){var i,r;for(Pn&&(i=_n.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(Pn)n=function(){_n.nextTick(i)};else if(!An||r.navigator&&r.navigator.standalone)if(Sn&&Sn.resolve){var o=Sn.resolve(void 0);n=function(){o.then(i)}}else n=function(){En.call(r,i)};else{var a=!0,s=document.createTextNode("");new An(i).observe(s,{characterData:!0}),n=function(){s.data=a=!a}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}}(),Bn=r.TypeError,Hn=r.process,Un=Hn&&Hn.versions,Wn=Un&&Un.v8||"",Kn=r.Promise,zn="process"==z(Hn),Yn=function(){},Gn=Mn=On.f,$n=!!function(){try{var e=Kn.resolve(1),t=(e.constructor={})[x("species")]=function(e){e(Yn,Yn)};return(zn||"function"==typeof PromiseRejectionEvent)&&e.then(Yn)instanceof t&&0!==Wn.indexOf("6.6")&&-1===Rn.indexOf("Chrome/66")}catch(e){}}(),Jn=function(e){var t;return!(!a(e)||"function"!=typeof(t=e.then))&&t},Qn=function(e,t){if(!e._n){e._n=!0;var n=e._c;Vn(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a,s=r?t.ok:t.fail,l=t.resolve,c=t.reject,u=t.domain;try{s?(r||(2==e._h&&ei(e),e._h=1),!0===s?n=i:(u&&u.enter(),n=s(i),u&&(u.exit(),a=!0)),n===t.promise?c(Bn("Promise-chain cycle")):(o=Jn(n))?o.call(n,l,c):l(n)):c(i)}catch(e){u&&!a&&u.exit(),c(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Xn(e)})}},Xn=function(e){qn.call(r,function(){var t,n,i,o=e._v,a=Zn(e);if(a&&(t=jn(function(){zn?Hn.emit("unhandledRejection",o,e):(n=r.onunhandledrejection)?n({promise:e,reason:o}):(i=r.console)&&i.error&&i.error("Unhandled promise rejection",o)}),e._h=zn||Zn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Zn=function(e){return 1!==e._h&&0===(e._a||e._c).length},ei=function(e){qn.call(r,function(){var t;zn?Hn.emit("rejectionHandled",e):(t=r.onrejectionhandled)&&t({promise:e,reason:e._v})})},ti=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()),Qn(t,!0))},ni=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Bn("Promise can't be resolved itself");(t=Jn(e))?Vn(function(){var r={_w:n,_d:!1};try{t.call(e,i(ni,r,1),i(ti,r,1))}catch(e){ti.call(r,e)}}):(n._v=e,n._s=1,Qn(n,!1))}catch(e){ti.call({_w:n,_d:!1},e)}}};$n||(Kn=function(e){Bt(this,Kn,"Promise","_h"),n(e),Ln.call(this);try{e(i(ni,this,1),i(ti,this,1))}catch(e){ti.call(this,e)}},(Ln=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=Vt(Kn.prototype,{then:function(e,t){var i,r,o,a=Gn((i=Kn,void 0===(o=s(this).constructor)||null==(r=s(o)[hn])?i:n(r)));return a.ok="function"!=typeof e||e,a.fail="function"==typeof t&&t,a.domain=zn?Hn.domain:void 0,this._c.push(a),this._a&&this._a.push(a),this._s&&Qn(this,!1),a.promise},catch:function(e){return this.then(void 0,e)}}),Nn=function(){var e=new Ln;this.promise=e,this.resolve=i(ni,e,1),this.reject=i(ti,e,1)},On.f=Gn=function(e){return e===Kn||e===xn?new Nn(e):Mn(e)}),S(S.G+S.W+S.F*!$n,{Promise:Kn}),ft(Kn,"Promise"),Dn("Promise"),xn=o.Promise,S(S.S+S.F*!$n,"Promise",{reject:function(e){var t=Gn(this);return(0,t.reject)(e),t.promise}}),S(S.S+S.F*!$n,"Promise",{resolve:function(e){return function(e,t){if(s(e),a(t)&&t.constructor===e)return t;var n=On.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),S(S.S+S.F*!($n&&Q(function(e){Kn.all(e).catch(Yn)})),"Promise",{all:function(e){var t=this,n=Gn(t),i=n.resolve,r=n.reject,o=jn(function(){var n=[],o=0,a=1;Ht(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Gn(t),i=n.reject,r=jn(function(){Ht(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var ii="".startsWith;S(S.P+S.F*rt("startsWith"),"String",{startsWith:function(e){var t=nt(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return ii?ii.call(t,i,n):t.slice(n,n+i.length)===i}}),S(S.S,"Number",{isNaN:function(e){return e!=e}});var ri=function(e){return null!=e?e.constructor:null},oi=function(e,t){return Boolean(e&&t&&e instanceof t)},ai=function(e){return null==e},si=function(e){return ri(e)===Object},li=function(e){return ri(e)===String},ci=function(e){return Array.isArray(e)},ui=function(e){return oi(e,NodeList)},di=function(e){return ai(e)||(li(e)||ci(e)||ui(e))&&!e.length||si(e)&&!Object.keys(e).length},hi={nullOrUndefined:ai,object:si,number:function(e){return ri(e)===Number&&!Number.isNaN(e)},string:li,boolean:function(e){return ri(e)===Boolean},function:function(e){return ri(e)===Function},array:ci,weakMap:function(e){return oi(e,WeakMap)},nodeList:ui,element:function(e){return oi(e,Element)},textNode:function(e){return ri(e)===Text},event:function(e){return oi(e,Event)},keyboardEvent:function(e){return oi(e,KeyboardEvent)},cue:function(e){return oi(e,window.TextTrackCue)||oi(e,window.VTTCue)},track:function(e){return oi(e,TextTrack)||!ai(e)&&li(e.kind)},url:function(e){if(oi(e,window.URL))return!0;if(!li(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!di(new URL(t).hostname)}catch(e){return!1}},empty:di},fi=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function pi(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!hi.empty(t)&&hi.function(n)){var s=t.split(" "),l=a;fi&&(l={passive:o,capture:a}),s.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function mi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,n,!0,i,r)}function gi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,n,!1,i,r)}function yi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];pi.call(this,e,t,function o(){gi(e,t,o,i,r);for(var a=arguments.length,s=new Array(a),l=0;l<a;l++)s[l]=arguments[l];n.apply(this,s)},!0,i,r)}function vi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(hi.element(e)&&!hi.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function bi(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)})}function ki(e,t){hi.element(e)&&!hi.empty(t)&&Object.entries(t).filter(function(e){var t=nn(e,2)[1];return!hi.nullOrUndefined(t)}).forEach(function(t){var n=nn(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function wi(e,t,n){var i=document.createElement(e);return hi.object(t)&&ki(i,t),hi.string(n)&&(i.innerText=n),i}function Ti(e,t,n,i){hi.element(t)&&t.appendChild(wi(e,n,i))}function Ei(e){hi.nodeList(e)||hi.array(e)?Array.from(e).forEach(Ei):hi.element(e)&&hi.element(e.parentNode)&&e.parentNode.removeChild(e)}function Ai(e){if(hi.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function _i(e,t){return hi.element(t)&&hi.element(t.parentNode)&&hi.element(e)?(t.parentNode.replaceChild(e,t),e):null}function Si(e,t){if(!hi.string(e)||hi.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("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":hi.object(i)&&hi.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n}function Pi(e,t){if(hi.element(e)){var n=t;hi.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function Ci(e,t,n){if(hi.nodeList(e))return Array.from(e).map(function(e){return Ci(e,t,n)});if(hi.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function Li(e,t){return hi.element(e)&&e.classList.contains(t)}function Mi(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function Ni(e){return this.elements.container.querySelectorAll(e)}function xi(e){return this.elements.container.querySelector(e)}function Oi(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];hi.element(e)&&(e.focus({preventScroll:!0}),t&&Ci(e,this.config.classNames.tabFocus))}var ji,Ii,Ri,Fi=(ji=document.createElement("span"),Ii={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Ri=Object.keys(Ii).find(function(e){return void 0!==ji.style[e]}),!!hi.string(Ri)&&Ii[Ri]);function Di(e){setTimeout(function(){try{Pi(e,!0),e.offsetHeight,Pi(e,!1)}catch(e){}},0)}var qi,Vi={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)},Bi={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Hi={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Vi.isIPhone&&n&&Hi.playsinline,r=Hi[e]||"html5"!==t;return{api:r,ui:r&&Hi.rangeInput&&("video"!==e||!Vi.isIPhone||i)}},pip:!(Vi.isIPhone||!hi.function(wi("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||wi("video").disablePictureInPicture)),airplay:hi.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=nn(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Bi).includes(n)&&(n+='; codecs="'.concat(Bi[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(qi=document.createElement("input"),qi.type="range","range"===qi.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Fi,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Ui={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return Hi.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return Ui.getSources.call(this).map(function(e){return Number(e.getAttribute("data-size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Ui.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("data-res"))},set:function(t){var n=Ui.getSources.call(e).find(function(e){return Number(e.getAttribute("data-res"))===t});if(n){var i=e.media,r=i.currentTime,o=i.paused,a=i.preload,s=i.readyState;e.media.src=n.getAttribute("src"),("none"!==a||s)&&(e.once("loadedmetadata",function(){e.currentTime=r,o||e.play()}),e.media.load()),vi.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(Ei(Ui.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function Wi(e){return hi.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Ki(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function zi(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new 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 hi.object(r)?(Object.keys(r).forEach(function(t){hi.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,tn({},t,{})),zi(e[t],r[t])):Object.assign(e,tn({},t,r[t]))}),zi.apply(void 0,[e].concat(n))):e}var Yi=g.f,Gi=_e.f,$i=r.RegExp,Ji=$i,Qi=$i.prototype,Xi=/a/g,Zi=/a/g,er=new $i(Xi)!==Xi;if(c&&(!er||l(function(){return Zi[x("match")]=!1,$i(Xi)!=Xi||$i(Zi)==Zi||"/a/i"!=$i(Xi,"i")}))){$i=function(e,t){var n=this instanceof $i,i=tt(e),r=void 0===t;return!n&&i&&e.constructor===$i&&r?e:pe(er?new Ji(i&&!r?e.source:e,t):Ji((i=e instanceof $i)?e.source:e,i&&r?st.call(e):t),n?this:Qi,$i)};for(var tr=function(e){e in $i||Yi($i,e,{configurable:!0,get:function(){return Ji[e]},set:function(t){Ji[e]=t}})},nr=Gi(Ji),ir=0;nr.length>ir;)tr(nr[ir++]);Qi.constructor=$i,$i.prototype=Qi,A(r,"RegExp",$i)}function rr(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return hi.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function or(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function ar(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function sr(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=or(e,"-"," "),e=or(e,"_"," "),or(e=ar(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function lr(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}Dn("RegExp");var cr={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},ur=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(hi.empty(e)||hi.empty(t))return"";var n=Ki(t.i18n,e);if(hi.empty(n))return Object.keys(cr).includes(e)?cr[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=nn(e,2),i=t[0],r=t[1];n=or(n,i,r)}),n},dr=function(){function e(t){Xt(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return en(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(hi.empty(n))return null;var i=JSON.parse(n);return hi.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&hi.object(t)){var n=this.get();hi.empty(n)&&(n={}),zi(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function hr(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.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function fr(e,t){if(hi.string(e)){var n=hi.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var o=dr.supported,a=document.createElement("div");if(a.setAttribute("hidden",""),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==s){var l=JSON.parse(s);r(a,l.content)}}hr(e).then(function(e){hi.empty(e)||(o&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}}var pr=function(e){return parseInt(e/60/60%60,10)},mr=function(e){return parseInt(e/60%60,10)},gr=function(e){return parseInt(e%60,10)};function yr(){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(!hi.number(e))return yr(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=pr(e),o=mr(e),a=gr(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(o),":").concat(i(a))}var vr={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Vi.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=xi.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Ni.call(this,this.config.selectors.buttons.play),pause:xi.call(this,this.config.selectors.buttons.pause),restart:xi.call(this,this.config.selectors.buttons.restart),rewind:xi.call(this,this.config.selectors.buttons.rewind),fastForward:xi.call(this,this.config.selectors.buttons.fastForward),mute:xi.call(this,this.config.selectors.buttons.mute),pip:xi.call(this,this.config.selectors.buttons.pip),airplay:xi.call(this,this.config.selectors.buttons.airplay),settings:xi.call(this,this.config.selectors.buttons.settings),captions:xi.call(this,this.config.selectors.buttons.captions),fullscreen:xi.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=xi.call(this,this.config.selectors.progress),this.elements.inputs={seek:xi.call(this,this.config.selectors.inputs.seek),volume:xi.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:xi.call(this,this.config.selectors.display.buffer),currentTime:xi.call(this,this.config.selectors.display.currentTime),duration:xi.call(this,this.config.selectors.display.duration)},hi.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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}},createIcon:function(e,t){var n=vr.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");ki(r,zi(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a="".concat(i,"-").concat(e);return"href"in o&&o.setAttributeNS("http://www.w3.org/1999/xlink","href",a),o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=ur(e,this.config);return wi("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(hi.empty(e))return null;var t=wi("span",{class:this.config.classNames.menu.value});return t.appendChild(wi("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=sr(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:hi.empty(r.label)&&(r.label=i),hi.empty(r.icon)&&(r.icon=e)}var o=wi(r.element);return r.toggle?(o.appendChild(vr.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),o.appendChild(vr.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),o.appendChild(vr.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),o.appendChild(vr.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(o.appendChild(vr.createIcon.call(this,r.icon)),o.appendChild(vr.createLabel.call(this,r.label))),zi(n,Si(this.config.selectors.buttons[i],n)),ki(o,n),"play"===i?(hi.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(o)):this.elements.buttons[i]=o,o},createRange:function(e,t){var n=wi("input",zi(Si(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":ur(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,vr.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=wi("progress",zi(Si(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(wi("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?ur(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=Si(this.config.selectors.display[e]),n=wi("div",zi(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":ur(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;mi(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,o=Mi(e,'[role="menuitemradio"]');if(!o&&[32,39].includes(i.which))vr.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||o&&39===i.which?(r=e.nextElementSibling,hi.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,hi.element(r)||(r=e.parentNode.lastElementChild)),Oi.call(n,r,!0))}},!1),mi(e,"keyup",function(e){13===e.which&&vr.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,o=e.title,a=e.badge,s=void 0===a?null:a,l=e.checked,c=void 0!==l&&l,u=Si(this.config.selectors.inputs[r]),d=wi("button",zi(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=wi("span");h.innerHTML=o,hi.element(s)&&h.appendChild(s),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return Mi(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!hi.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}vr.showMenuPanel.call(t,"home",hi.keyboardEvent(e))}},r,!1),vr.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return hi.number(e)?yr(e,pr(this.duration)>0,t):e},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];hi.element(e)&&hi.number(t)&&(e.innerText=vr.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(hi.element(this.elements.inputs.volume)&&vr.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),hi.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;hi.element(e)&&(e.value=t,vr.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&hi.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&vr.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=hi.number(n)?n:0,r=hi.element(e)?e:t.elements.display.buffer;if(hi.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];hi.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=hi.event(e)?e.target:e;if(hi.element(t)&&"range"===t.getAttribute("type")){if(Mi(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=vr.formatTime(this.currentTime),i=vr.formatTime(this.duration),r=ur("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(Mi(t,this.config.selectors.inputs.volume)){var o=100*t.value;t.setAttribute("aria-valuenow",o),t.setAttribute("aria-valuetext","".concat(o.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);Vi.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&hi.element(this.elements.inputs.seek)&&hi.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),o=function(e){Ci(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(hi.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Li(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),vr.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),hi.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!hi.element(this.elements.display.duration)&&this.config.invertTime;vr.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||vr.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return Pi(this.elements.display.currentTime,!0),void Pi(this.elements.progress,!0);hi.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=hi.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&vr.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&vr.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),vr.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){Pi(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,o=t;if("captions"===e)r=this.currentTrack;else{if(r=hi.empty(n)?this[e]:n,hi.empty(r)&&(r=this.config[e].default),!hi.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if(hi.element(o)||(o=i&&i.querySelector('[role="menu"]')),hi.element(o)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=vr.getLabel.call(this,e,r);var a=o&&o.querySelector('[value="'.concat(r,'"]'));hi.element(a)&&(a.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?ur("normal",this.config):"".concat(t,"&times;");case"quality":if(hi.number(t)){var n=ur("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return ar(t);case"captions":return wr.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(hi.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');hi.array(e)&&(this.options.quality=Wi(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!hi.empty(this.options.quality)&&this.options.quality.length>1;if(vr.toggleMenuButton.call(this,"quality",i),Ai(n),vr.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){vr.createMenuItem.call(t,{value:e,list:n,type:"quality",title:vr.getLabel.call(t,"quality",e),badge:function(e){var n=ur("qualityBadge.".concat(e),t.config);return n.length?vr.createBadge.call(t,n):null}(e)})}),vr.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(hi.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=wr.getTracks.call(this),i=Boolean(n.length);if(vr.toggleMenuButton.call(this,"captions",i),Ai(t),vr.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:wr.getLabel.call(e,n),badge:n.language&&vr.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:ur("disabled",this.config),list:t,type:"language"}),r.forEach(vr.createMenuItem.bind(this)),vr.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(hi.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');hi.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!hi.empty(this.options.speed)&&this.options.speed.length>1;vr.toggleMenuButton.call(this,"speed",i),Ai(n),vr.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){vr.createMenuItem.call(t,{value:e,list:n,type:"speed",title:vr.getLabel.call(t,"speed",e)})}),vr.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!hi.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Pi(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;hi.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');Oi.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(hi.element(t)&&hi.element(n)){var i=t.hidden,r=i;if(hi.boolean(e))r=e;else if(hi.keyboardEvent(e)&&27===e.which)r=!1;else if(hi.event(e)){var o=t.contains(e.target);if(o||!o&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),Pi(t,!r),Ci(this.elements.container,this.config.classNames.menu.open,r),r&&hi.keyboardEvent(e)?vr.focusFirstMenuItem.call(this,null,!0):r||i||Oi.call(this,n,hi.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Ei(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(hi.element(i)){var r=i.parentNode,o=Array.from(r.children).find(function(e){return!e.hidden});if(Hi.transitions&&!Hi.reducedMotion){r.style.width="".concat(o.scrollWidth,"px"),r.style.height="".concat(o.scrollHeight,"px");var a=vr.getMenuSize.call(this,i);mi.call(this,r,Fi,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",gi.call(e,r,Fi,t))}),r.style.width="".concat(a.width,"px"),r.style.height="".concat(a.height,"px")}Pi(o,!0),Pi(i,!1),vr.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;hi.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=wi("div",Si(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(vr.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(vr.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(vr.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(vr.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=wi("div",Si(this.config.selectors.progress));if(i.appendChild(vr.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(vr.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=wi("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(vr.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(vr.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var o=wi("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&o.appendChild(vr.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a={max:1,step:.05,value:this.config.volume};o.appendChild(vr.createRange.call(this,"volume",zi(a,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=o}n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(vr.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!hi.empty(this.config.settings)){var s=wi("div",{class:"plyr__menu",hidden:""});s.appendChild(vr.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=wi("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=wi("div"),u=wi("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=wi("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=wi("button",zi(Si(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));vr.bindMenuItemShortcuts.call(t,i,n),mi(i,"click",function(){vr.showMenuPanel.call(t,n,!1)});var r=wi("span",null,ur(n,t.config)),o=wi("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),d.appendChild(i);var a=wi("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),s=wi("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});s.appendChild(wi("span",{"aria-hidden":!0},ur(n,t.config))),s.appendChild(wi("span",{class:t.config.classNames.hidden},ur("menuBack",t.config))),mi(a,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),vr.showMenuPanel.call(t,"home",!0))},!1),mi(s,"click",function(){vr.showMenuPanel.call(t,"home",!1)}),a.appendChild(s),a.appendChild(wi("div",{role:"menu"})),c.appendChild(a),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=a}),l.appendChild(c),s.appendChild(l),n.appendChild(s),this.elements.settings.popup=l,this.elements.settings.menu=s}if(this.config.controls.includes("pip")&&Hi.pip&&n.appendChild(vr.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Hi.airplay&&n.appendChild(vr.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},f=this.config.urls.download;!hi.url(f)&&this.isEmbed&&zi(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(vr.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(vr.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(vr.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&vr.setQualityMenu.call(this,Ui.getQualityOptions.call(this)),vr.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=vr.getIconUrl.call(this);t.cors&&fr(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;hi.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),hi.element(this.config.controls)||hi.string(this.config.controls)?n=this.config.controls:(n=vr.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:wr.getLabel.call(this)}),r=!1);var o,a=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=nn(e,2),i=n[0],r=n[1];t=or(t,"{".concat(i,"}"),r)}),t};if(r&&(hi.string(this.config.controls)?n=a(n):hi.element(n)&&(n.innerHTML=a(n.innerHTML))),hi.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),hi.element(o)||(o=this.elements.container),o[hi.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),hi.element(this.elements.controls)||vr.findElements.call(this),!hi.empty(this.elements.buttons)){var s=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return Li(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Ci(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){hi.array(e)||hi.nodeList(e)?Array.from(e).filter(Boolean).forEach(s):s(e)})}if(window.navigator.userAgent.includes("Edge")&&Di(o),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=Ni.call(this,d);Array.from(h).forEach(function(t){Ci(t,e.config.classNames.hidden,!1),Ci(t,e.config.classNames.tooltip,!0)})}}};function br(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function kr(e){var t=new URLSearchParams;return hi.object(e)&&Object.entries(e).forEach(function(e){var n=nn(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var wr={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Hi.textTracks)hi.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&vr.setCaptionsMenu.call(this);else{var e,t;if(hi.element(this.elements.captions)||(this.elements.captions=wi("div",Si(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,hi.element(e)&&hi.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Vi.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=br(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&hr(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Ei(e)})})}var i=Wi((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=nn(i,1)[0];var o=this.storage.get("captions");if(hi.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:r,languages:i}),this.isHTML5){var a=this.config.captions.update?"addtrack removetrack":"removetrack";mi.call(this,this.media.textTracks,a,wr.update.bind(this))}setTimeout(wr.update.bind(this),0)}},update:function(){var e=this,t=wr.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,o=n.meta,a=n.currentTrackNode,s=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!o.get(e)}).forEach(function(t){e.debug.log("Track added",t),o.set(t,{default:"showing"===t.mode}),t.mode="hidden",mi.call(e,t,"cuechange",function(){return wr.updateCues.call(e)})}),(s&&this.language!==r||!t.includes(a))&&(wr.setLanguage.call(this,r),wr.toggle.call(this,i&&s)),Ci(this.elements.container,this.config.classNames.captions.enabled,!hi.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&vr.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=hi.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var o=wr.getTracks.call(this),a=wr.findTrack.call(this,[this.captions.language].concat(rn(this.captions.languages)),!0);return this.captions.language=a.language,void wr.set.call(this,o.indexOf(a))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),Ci(this.elements.container,i,r),this.captions.toggled=r,vr.updateSetting.call(this,"captions"),vi.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=wr.getTracks.call(this);if(-1!==e)if(hi.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,vr.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),vi.call(this,this.media,"languagechange")}wr.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&wr.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else wr.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(hi.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=wr.getTracks.call(this),r=wr.findTrack.call(this,[n]);wr.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=wr.getTracks.call(this),o=function(e){return Number((n.captions.meta.get(e)||{}).default)},a=Array.from(r).sort(function(e,t){return o(t)-o(e)});return e.every(function(e){return!(t=a.find(function(t){return t.language===e}))}),t||(i?a[0]:void 0)},getCurrentTrack:function(){return wr.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!hi.track(t)&&Hi.textTracks&&this.captions.toggled&&(t=wr.getCurrentTrack.call(this)),hi.track(t)?hi.empty(t.label)?hi.empty(t.language)?ur("enabled",this.config):e.language.toUpperCase():t.label:ur("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(hi.element(this.elements.captions))if(hi.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=wr.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(lr)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){Ai(this.elements.captions);var r=wi("span",Si(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),vi.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},Tr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.4.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","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"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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,publisherId:""}},Er="picture-in-picture",Ar="inline",_r={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Sr={audio:"audio",video:"video"};var Pr=function(){},Cr=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Xt(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return en(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Pr}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Pr}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Pr}}]),e}();function Lr(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;hi.element(e)&&(e.pressed=this.active),vi.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Vi.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(hi.element(e)){var n=Ni.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];pi.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function Mr(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",Ci(this.target,this.player.config.classNames.fullscreen.fallback,t),Vi.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=hi.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return Di(e.target)},100)}Lr.call(this)}var Nr=function(){function e(t){var n=this;Xt(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},mi.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){Lr.call(n)}),mi.call(this.player,this.player.elements.container,"dblclick",function(e){hi.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return en(e,[{key:"update",value:function(){this.enabled?this.player.debug.log("".concat(e.native?"Native":"Fallback"," fullscreen enabled")):this.player.debug.log("Fullscreen not supported and fallback disabled"),Ci(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Vi.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():e.native?this.prefix?hi.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen():Mr.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Vi.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!hi.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else Mr.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target:Li(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Vi.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(hi.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!hi.function(document["".concat(t,"ExitFullscreen")])&&!hi.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),xr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};function Or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})}S(S.S,"Math",{sign:xr});var jr={addStyleHook:function(){Ci(this.elements.container,this.config.selectors.container.replace(".",""),!0),Ci(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(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void jr.toggleNativeControls.call(this,!0);hi.element(this.elements.controls)||(vr.inject.call(this),this.listeners.controls()),jr.toggleNativeControls.call(this),this.isHTML5&&wr.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,vr.updateVolume.call(this),vr.timeUpdate.call(this),jr.checkPlaying.call(this),Ci(this.elements.container,this.config.classNames.pip.supported,Hi.pip&&this.isHTML5&&this.isVideo),Ci(this.elements.container,this.config.classNames.airplay.supported,Hi.airplay&&this.isHTML5),Ci(this.elements.container,this.config.classNames.isIos,Vi.isIos),Ci(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){vi.call(e,e.media,"ready")},0),jr.setTitle.call(this),this.poster&&jr.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&vr.durationUpdate.call(this)},setTitle:function(){var e=ur("play",this.config);if(hi.string(this.config.title)&&!hi.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=xi.call(this,"iframe");if(!hi.element(t))return;var n=hi.empty(this.config.title)?"video":this.config.title,i=ur("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Ci(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):mi.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return Or(e)}).catch(function(n){throw e===t.poster&&jr.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),jr.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;Ci(this.elements.container,this.config.classNames.playing,this.playing),Ci(this.elements.container,this.config.classNames.paused,this.paused),Ci(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),hi.event(e)&&"timeupdate"===e.type||jr.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Ci(t.elements.container,t.config.classNames.loading,t.loading),jr.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}},Ir=function(){function e(t){Xt(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return en(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,o=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&hi.number(i)){if(r){var a=document.activeElement;if(hi.element(a)){var s=t.config.selectors.editable;if(a!==n.inputs.seek&&Mi(a,s))return;if(32===e.which&&Mi(a,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:o||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:o||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:o||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===i&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){vr.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,Ci(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,Ci(Ni.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&Ci(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&pi.call(t,window,"keydown keyup",this.handleKey,e,!1),pi.call(t,document.body,"click",this.toggleMenu,e),yi.call(t,document.body,"touchstart",this.firstTouch),pi.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.elements;!e.config.keyboard.global&&e.config.keyboard.focused&&mi.call(e,t.container,"keydown keyup",this.handleKey,!1),mi.call(e,t.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(n){var i=t.controls;i&&"enterfullscreen"===n.type&&(i.pressed=!1,i.hover=!1);var r=0;["touchstart","touchmove","mousemove"].includes(n.type)&&(jr.toggleControls.call(e,!0),r=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return jr.toggleControls.call(e,!1)},r)})}},{key:"media",value:function(){var e=this.player,t=e.elements;if(mi.call(e,e.media,"timeupdate seeking seeked",function(t){return vr.timeUpdate.call(e,t)}),mi.call(e,e.media,"durationchange loadeddata loadedmetadata",function(t){return vr.durationUpdate.call(e,t)}),mi.call(e,e.media,"canplay loadeddata",function(){Pi(t.volume,!e.hasAudio),Pi(t.buttons.mute,!e.hasAudio)}),mi.call(e,e.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&e.restart()}),mi.call(e,e.media,"progress playing seeking seeked",function(t){return vr.updateProgress.call(e,t)}),mi.call(e,e.media,"volumechange",function(t){return vr.updateVolume.call(e,t)}),mi.call(e,e.media,"playing play pause ended emptied timeupdate",function(t){return jr.checkPlaying.call(e,t)}),mi.call(e,e.media,"waiting canplay seeked playing",function(t){return jr.checkLoading.call(e,t)}),mi.call(e,e.media,"playing",function(){e.ads&&e.ads.enabled&&!e.ads.initialized&&e.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.play()})}),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){var n=xi.call(e,".".concat(e.config.classNames.video));if(!hi.element(n))return;mi.call(e,t.container,"click",function(i){([t.container,n].includes(i.target)||n.contains(i.target))&&(e.touch&&e.config.hideControls||(e.ended?(e.restart(),e.play()):e.togglePlay()))})}e.supported.ui&&e.config.disableContextMenu&&mi.call(e,t.wrapper,"contextmenu",function(e){e.preventDefault()},!1),mi.call(e,e.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),mi.call(e,e.media,"ratechange",function(){vr.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),mi.call(e,e.media,"qualitychange",function(t){vr.updateSetting.call(e,"quality",null,t.detail.quality)}),mi.call(e,e.media,"ready qualitychange",function(){vr.setDownloadLink.call(e)});var i=e.config.events.concat(["keyup","keydown"]).join(" ");mi.call(e,e.media,i,function(n){var i=n.detail,r=void 0===i?{}:i;"error"===n.type&&(r=e.media.error),vi.call(e,t.container,n.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],o=!0;hi.function(r)&&(o=r.call(i,e)),o&&hi.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=this.player,s=a.config.listeners[i],l=hi.function(s);mi.call(a,e,t,function(e){return r.proxy(e,n,i)},o&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=Vi.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){vi.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),vr.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),vr.toggleMenu.call(t,e)):vr.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&vr.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!hi.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),o=["mouseup","touchend","keyup"].includes(e.type);r&&o?(n.removeAttribute("play-on-seeked"),t.play()):!o&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),Vi.isIos){var r=Ni.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return Di(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");hi.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return vr.updateSeekTooltip.call(t,e)}),Vi.isWebkit&&Array.from(Ni.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return vr.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!hi.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,vr.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;Ci(i.controls,n.classNames.noTransition,!0),jr.toggleControls.call(t,!0),setTimeout(function(){Ci(i.controls,n.classNames.noTransition,!1)},0);var o=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return jr.toggleControls.call(t,!1)},o)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=nn([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],o=i[1],a=Math.sign(Math.abs(r)>Math.abs(o)?r:o);t.increaseVolume(a/50);var s=t.media.volume;(1===a&&s<1||-1===a&&s>0)&&e.preventDefault()},"volume",!1)}}]),e}(),Rr=g.f,Fr=Function.prototype,Dr=/^\s*function ([^ (]*)/;"name"in Fr||c&&Rr(Fr,"name",{configurable:!0,get:function(){try{return(""+this).match(Dr)[1]}catch(e){return""}}}),at("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var qr=t(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s}()});function Vr(e){return new Promise(function(t,n){qr(e,{success:t,error:n})})}function Br(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,vi.call(this,this.media,e?"play":"pause"))}var Hr={setup:function(){var e=this;Ci(this.elements.wrapper,this.config.classNames.embed,!0),Hr.setAspectRatio.call(this),hi.object(window.Vimeo)?Hr.ready.call(this):Vr(this.config.urls.vimeo.sdk).then(function(){Hr.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=nn((hi.string(e)?e:this.config.ratio).split(":").map(Number),2),n=100/t[0]*t[1];if(Hr.padding=n,this.elements.wrapper.style.paddingBottom="".concat(n,"%"),this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-".concat(i,"%)")}},ready:function(){var e=this,t=this,n=kr({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");hi.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var r,o=(r=i,hi.empty(r)?null:hi.number(Number(r))?r:r.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:r),a=wi("iframe"),s=rr(t.config.urls.vimeo.iframe,o,n);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=wi("div",{poster:t.poster,class:t.config.classNames.embedContainer});l.appendChild(a),t.media=_i(l,t.media),hr(rr(t.config.urls.vimeo.api,o),"json").then(function(e){if(!hi.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname="".concat(n.pathname.split("_")[0],".jpg"),jr.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Br.call(t,!0),t.embed.play()},t.media.pause=function(){return Br.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume,a=r&&!n.hasPlayed;i.seeking=!0,vi.call(t,i,"seeking"),Promise.resolve(a&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return a&&n.pause()}).then(function(){return a&&n.setVolume(o)}).catch(function(){})}});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,vi.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&vr.setSpeedMenu.call(t,[])})}});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,vi.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!hi.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,vi.call(t,t.media,"volumechange")})}});var f,p=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return p},set:function(e){var n=hi.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){p=n})}}),t.embed.getVideoUrl().then(function(e){f=e,vr.setDownloadLink.call(t)}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return f}}),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,i,r;Hr.ratio=(n=t[0],i=t[1],r=function e(t,n){return 0===n?t:e(n,t%n)}(n,i),"".concat(n/r,":").concat(i/r)),Hr.setAspectRatio.call(e,Hr.ratio)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,jr.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,vi.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,vi.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,wr.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});wr.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Br.call(t,!e),e||vi.call(t,t.media,"playing")}),hi.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Br.call(t,!0),vi.call(t,t.media,"playing")}),t.embed.on("pause",function(){Br.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,vi.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,vi.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&vi.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,vi.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,vi.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,vi.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,vi.call(t,t.media,"error")}),t.on("enterfullscreen exitfullscreen",function(e){var n=t.fullscreen.target;if(n===t.elements.container){var i="enterfullscreen"===e.type,r=nn(Hr.ratio.split(":").map(Number),2),o=r[0]>r[1]?"width":"height";n.style[o]=i?"".concat(Hr.padding,"%"):null}}),setTimeout(function(){return jr.build.call(t)},0)}};function Ur(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,vi.call(this,this.media,e?"play":"pause"))}var Wr,Kr={setup:function(){var e=this;Ci(this.elements.wrapper,this.config.classNames.embed,!0),Kr.setAspectRatio.call(this),hi.object(window.YT)&&hi.function(window.YT.Player)?Kr.ready.call(this):(Vr(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Kr.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(hi.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(hi.empty(n))return this.config.title=n,void jr.setTitle.call(this)}var i=this.config.keys.google;hi.string(i)&&!hi.empty(i)&&hr(rr(this.config.urls.youtube.api,e,i)).then(function(e){hi.object(e)&&(t.config.title=e.items[0].snippet.title,jr.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom="".concat(100/e[0]*e[1],"%")},ready:function(){var e=this,t=e.media.getAttribute("id");if(hi.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");hi.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,r,o=(i=n,hi.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),a=(r=e.provider,"".concat(r,"-").concat(Math.floor(1e4*Math.random()))),s=wi("div",{id:a,poster:e.poster});e.media=_i(s,e.media);var l=function(e){return"https://img.youtube.com/vi/".concat(o,"/").concat(e,"default.jpg")};Or(l("maxres"),121).catch(function(){return Or(l("sd"),121)}).catch(function(){return Or(l("hq"))}).then(function(t){return jr.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(a,{videoId:o,playerVars:{autoplay:e.config.autoplay?1:0,hl:e.config.hl,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(!e.media.error){var n=t.data,i={2:"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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},vi.call(e,e.media,"error")}},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),vi.call(e,e.media,"ratechange")},onReady:function(t){if(!hi.function(e.media.play)){var n=t.target;Kr.getTitle.call(e,o),e.media.play=function(){Ur.call(e,!0),n.playVideo()},e.media.pause=function(){Ur.call(e,!1),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.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,vi.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),vi.call(e,e.media,"volumechange")}});var r=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return r},set:function(t){var i=hi.boolean(t)?t:r;r=i,n[i?"mute":"unMute"](),vi.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),vi.call(e,e.media,"timeupdate"),vi.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&vi.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),vi.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return jr.build.call(e)},50)}},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,vi.call(e,e.media,"seeked")),t.data){case-1:vi.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),vi.call(e,e.media,"progress");break;case 0:Ur.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):vi.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(Ur.call(e,!0),vi.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){vi.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),vi.call(e,e.media,"durationchange")));break;case 2:e.muted||e.embed.unMute(),Ur.call(e,!1)}vi.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},zr={setup:function(){this.media?(Ci(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Ci(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Ci(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=wi("div",{class:this.config.classNames.video}),bi(this.media,this.elements.wrapper),this.elements.poster=wi("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?Ui.extend.call(this):this.isYouTube?Kr.setup.call(this):this.isVimeo&&Hr.setup.call(this)):this.debug.warn("No media element found!")}},Yr=function(){function e(t){var n=this;Xt(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return en(e,[{key:"load",value:function(){var e=this;this.enabled&&(hi.object(window.google)&&hi.object(window.google.ima)?this.ready():Vr(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=wi("div",{class:this.player.config.classNames.ads}),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=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=yr(Math.max(e.manager.getRemainingTime(),0)),n="".concat(ur("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),hi.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(hi.element(n)){var i=100/t.player.duration*e,r=wi("span",{class:t.player.config.classNames.cues});r.style.left="".concat(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.trigger("loaded")}}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads".concat(e.replace(/_/g,"").toLowerCase());vi.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e,t=this,n=this.player.elements.container;this.player.on("ended",function(){t.loader.contentComplete()}),this.player.on("seeking",function(){return e=t.player.currentTime}),this.player.on("seeked",function(){var n=t.player.currentTime;hi.empty(t.cuePoints)||t.cuePoints.forEach(function(i,r){e<i&&i<n&&(t.manager.discardAdBreak(),t.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){t.manager&&t.manager.resize(n.offsetWidth,n.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),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)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("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("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];hi.array(o)&&o.forEach(function(e){hi.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return hi.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: ".concat(t)),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){hi.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: ".concat(e)),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!hi.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"".concat("https://go.aniview.com/api/adserver6/vast/","?").concat(kr(e))}}]),e}(),Gr={insertElements:function(e,t){var n=this;hi.string(t)?Ti(e,this.media,{src:t}):hi.array(t)&&t.forEach(function(t){Ti(e,n.media,t)})},change:function(e){var t=this;Ki(e,"sources.length")?(Ui.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],Ei(t.media),t.media=null,hi.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=nn(n,1)[0],o=r.provider,a=void 0===o?_r.html5:o,s=r.src,l="html5"===a?i:"div",c="html5"===a?{}:{src:s};Object.assign(t,{provider:a,type:i,supported:Hi.check(i,a,t.config.playsinline),media:wi(l,c)}),t.elements.container.appendChild(t.media),hi.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),hi.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),jr.addStyleHook.call(t),t.isHTML5&&Gr.insertElements.call(t,"source",n),t.config.title=e.title,zr.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&Gr.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&jr.build.call(t),t.isHTML5&&t.media.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},$r=function(){function e(t,n){var i=this;if(Xt(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Hi.touch,this.media=t,hi.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||hi.nodeList(this.media)||hi.array(this.media))&&(this.media=this.media[0]),this.config=zi({},Tr,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Cr(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Hi),!hi.nullOrUndefined(this.media)&&hi.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Hi.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),hi.element(a)){if(s=br(a.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_r.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?_r.vimeo:null}(s.toString()),this.elements.container=this.media,this.media=a,this.elements.container.className="",s.search.length){var l=["1","true"];l.includes(s.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(s.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(s.searchParams.get("playsinline")),this.config.hl=s.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(hi.empty(this.provider)||!Object.keys(_r).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Sr.video;break;case"video":case"audio":this.type=o,this.provider=_r.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!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=Hi.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new Ir(this),this.storage=new dr(this),this.media.plyr=this,hi.element(this.elements.container)||(this.elements.container=wi("div"),bi(this.media,this.elements.container)),jr.addStyleHook.call(this),zr.setup.call(this),this.config.debug&&mi.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&jr.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new Nr(this),this.config.ads.enabled&&(this.ads=new Yr(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0):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 en(e,[{key:"play",value:function(){return hi.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&hi.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(hi.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):hi.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(hi.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(hi.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(hi.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){wr.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Hi.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Li(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Ci(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!hi.empty(this.config.settings)&&vr.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";vi.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){mi.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){yi.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){gi(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Ei(t.elements.buttons.play),Ei(t.elements.captions),Ei(t.elements.controls),Ei(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),hi.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),_i(t.elements.original,t.elements.container),vi.call(t,t.elements.original,"destroyed",!0),hi.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),jr.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&hi.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Hi.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===_r.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===_r.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===_r.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Sr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Sr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=hi.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return hi.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=hi.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;hi.string(t)&&(t=Number(t)),hi.number(t)||(t=this.storage.get("volume")),hi.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!hi.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;hi.boolean(t)||(t=this.storage.get("muted")),hi.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;hi.number(e)&&(t=e),hi.number(t)||(t=this.storage.get("speed")),hi.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!hi.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(hi.number),r=!0;if(!n.includes(i)){var o=function(e,t){return hi.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: ".concat(i,", using ").concat(o," instead")),i=o,r=!1}t.selected=i,this.media.quality=i,r&&this.storage.set({quality:i})}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=hi.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Gr.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"download",get:function(){var e=this.config.urls.download;return hi.url(e)?e:this.source}},{key:"poster",set:function(e){this.isVideo?jr.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=hi.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){wr.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){wr.setLanguage.call(this,e,!1)},get:function(){return(wr.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){if(Hi.pip){var t=hi.boolean(e)?e:!this.pip;hi.function(this.media.webkitSetPresentationMode)&&this.media.webkitSetPresentationMode(t?Er:Ar),hi.function(this.media.requestPictureInPicture)&&(!this.pip&&t?this.media.requestPictureInPicture():this.pip&&!t&&document.exitPictureInPicture())}},get:function(){return Hi.pip?hi.empty(this.media.webkitPresentationMode)?this.media===document.pictureInPictureElement:this.media.webkitPresentationMode===Er:null}}],[{key:"supported",value:function(e,t,n){return Hi.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return fr(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return hi.string(t)?i=Array.from(document.querySelectorAll(t)):hi.nodeList(t)?i=Array.from(t):hi.array(t)&&(i=t.filter(hi.element)),hi.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return $r.defaults=(Wr=Tr,JSON.parse(JSON.stringify(Wr))),$r});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/templates/libs/plyr/plyr.polyfilled.min.js.map b/templates/libs/plyr/plyr.polyfilled.min.js.map
index 89cb1d1..739c116 100644
--- a/templates/libs/plyr/plyr.polyfilled.min.js.map
+++ b/templates/libs/plyr/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","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/_export.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/_iobject.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/es6.array.find.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.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/_string-ws.js","node_modules/core-js/modules/_string-trim.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/es6.number.constructor.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.keys.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.includes.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_invoke.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/_user-agent.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.number.is-nan.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","node_modules/core-js/modules/es6.regexp.constructor.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","node_modules/core-js/modules/_math-sign.js","src/js/utils/loadImage.js","node_modules/core-js/modules/es6.math.sign.js","src/js/ui.js","src/js/listeners.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["window","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","Error","e","event","params","evt","origPrevent","bubbles","detail","undefined","document","createEvent","initCustomEvent","call","this","Object","defineProperty","get","prototype","Event","global","iteratorSupported","Symbol","iterator","error","checkIfIteratorIsSupported","createIterator","items","next","value","shift","done","serializeParam","encodeURIComponent","replace","deserializeParam","decodeURIComponent","URLSearchParams","toString","searchString","writable","_fromString","_this","forEach","name","append","proto","_entries","push","delete","getAll","slice","has","set","callback","thisArg","entries","hasOwnProperty","i","length","keys","values","searchArray","join","enumerable","configurable","attribute","attributes","split","polyfillURLSearchParams","sort","a","b","self","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","String","baseElement","doc","location","implementation","createHTMLDocument","createElement","head","appendChild","indexOf","err","anchorElement","body","protocol","test","TypeError","search","enableSearchUpdate","enableSearchParamsUpdate","methodName","method","apply","arguments","attributeName","_anchorElement","linkURLWithAnchorAttribute","_updateSearchParams","defineProperties","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","port","hostname","password","username","createObjectURL","blob","revokeObjectURL","polyfillURL","getOrigin","setInterval","_aFunction","it","_ctx","fn","that","aFunction","c","module","exports","Math","Function","__g","core","version","__e","_isObject","_anObject","isObject","_fails","exec","_descriptors","require$$0","is","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","val","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","_propertyDesc","bitmap","_hide","object","key","f","createDesc","_has","id","px","random","_uid","concat","SRC","$toString","TPL","inspectSource","safe","isFunction","hide","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","_export","_defined","_toObject","defined","_iterCall","ret","_iterators","store","mode","copyright","USE_SYMBOL","uid","ITERATOR","ArrayProto","Array","_isArrayIter","Iterators","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_createProperty","index","$defineProperty","_cof","TAG","ARG","cof","_classof","T","tryGet","callee","core_getIteratorMethod","getIteratorMethod","classof","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","from","arrayLike","result","step","toObject","C","aLen","mapfn","mapping","iterFn","getIterFn","isArrayIter","toLength","createProperty","_iobject","propertyIsEnumerable","_isArray","isArray","arg","SPECIES","_arraySpeciesCreate","original","constructor","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","asc","$this","callbackfn","res","IObject","UNSCOPABLES","_addToUnscopables","$find","forced","find","_toIobject","gOPD","getOwnPropertyDescriptor","toIObject","pIE","check","setPrototypeOf","buggy","__proto__","_inheritIfRequired","max","_arrayIncludes","IS_INCLUDES","el","fromIndex","toAbsoluteIndex","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_stringWs","space","spaces","ltrim","RegExp","rtrim","exporter","KEY","ALIAS","FORCE","fails","trim","string","_stringTrim","_objectKeys","enumBugKeys","_objectDps","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","src","contentWindow","open","write","lt","close","_objectCreate","dPs","gOPN","$trim","require$$3","$Number","Base","BROKEN_COF","require$$4","TRIM","toNumber","argument","third","radix","maxCode","first","charCodeAt","NaN","code","digits","l","parseInt","inheritIfRequired","require$$5","j","require$$6","MATCH","_isRegexp","isRegExp","_stringContext","NAME","_failsIsRegexp","re","includes","context","$includes","_fixReWks","SYMBOL","wks","fns","strfn","rxfn","SEARCH","$search","regexp","_flags","ignoreCase","multiline","unicode","sticky","flags","define","DESCRIPTORS","$flags","_iterStep","def","_setToStringTag","tag","stat","IteratorPrototype","_iterCreate","Constructor","descriptor","setToStringTag","ObjectProto","_objectGpo","getPrototypeOf","BUGGY","returnThis","_iterDefine","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","es6_array_iterator","iterated","_t","_i","_k","Arguments","addToUnscopables","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","$iterators","$at","TO_STRING","pos","s","charAt","point","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","k","getSymbols","gOPS","isEnum","_redefineAll","_anInstance","forbiddenField","BREAK","RETURN","iterable","_validateCollection","arrayFind","createArrayMethod","arrayFindIndex","uncaughtFrozenStore","_l","UncaughtFrozenStore","findUncaughtFrozen","entry","splice","_collectionWeak","getConstructor","wrapper","ADDER","anInstance","forOf","redefineAll","data","validate","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","$iterDetect","BUGGY_ZERO","$instance","clear","setStrong","freeze","_f","SPLIT","$split","_split","$push","NPCG","separator","limit","separator2","match","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","_objectToArray","isEntries","$values","REPLACE","$replace","searchValue","replaceValue","defer","channel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","args","un","invoke","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","v","navigator","_userAgent","userAgent","_setSpecies","task","microtask","last","notify","flush","parent","domain","exit","enter","standalone","then","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","executor","onFulfilled","onRejected","D","catch","r","capability","x","promiseCapability","promiseResolve","require$$7","all","remaining","$index","alreadyCalled","race","$startsWith","startsWith","number","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","Number","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","keyboardEvent","KeyboardEvent","cue","TextTrackCue","VTTCue","track","TextTrack","supportsPassiveListeners","supported","options","removeEventListener","toggleListener","passive","capture","events","eventListeners","on","off","once","onceCallback","_len","_key","triggerEvent","plyr","dispatchEvent","wrap","elements","targets","reverse","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","setAttributes","filter","_ref","_slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","className","parts","class","toggleHidden","hidden","removeAttribute","toggleClass","force","map","classList","contains","hasClass","matches","querySelectorAll","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","repaint","offsetHeight","range","browser","isIE","documentMode","isWebkit","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getAttribute","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","readyState","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","item","getDeep","path","reduce","obj","sources","_defineProperty","$RegExp","re1","re2","CORRECT_NEW","p","tiRE","piRE","fiU","proxy","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","enabled","storage","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","request","XMLHttpRequest","responseText","response","status","send","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","content","getHours","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","children","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","_this9","aria-haspopup","aria-controls","aria-expanded","inner","home","backButton","urls","isEmbed","inject","_this10","seektime","addProperty","controlPressed","_this$config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_this$captions","currentTrackNode","languageExists","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","onChange","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","y","scrollY","scrollTo","overflow","viewport","property","hasProperty","cleanupViewport","part","Fullscreen","prefix","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","_mathSign","sign","loadImage","minWidth","image","Image","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","rect","currentTarget","hasAttribute","seekTo","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","abs","FProto","nameRE","$match","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","subscribe","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split$map2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","h","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","_vimeo$ratio$split$ma2","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","snippet","currentId","posterSrc","playerVars","hl","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","getProviderByUrl","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","curr","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.polyfilled.min.js","sourcesContent":["// 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\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\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(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\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","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n\r\n if (typeof searchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n this._entries = {};\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n if (typeof URLSearchParams.prototype.sort !== 'function') {\r\n URLSearchParams.prototype.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\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","// 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.7' };\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","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","// 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","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\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","module.exports = {};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\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","// 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","// 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","'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","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\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","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","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","'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","// 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.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","'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","exports.f = {}.propertyIsEnumerable;\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 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","// 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","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 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","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\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","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\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.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","// 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.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// 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","'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","// @@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';\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';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\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 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","// 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","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\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 = $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 && typeof IteratorPrototype[ITERATOR] != 'function') 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 $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","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 $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\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","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","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","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 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 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 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","// 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","// @@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","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 $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-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","// @@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","// 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","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","// 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","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 // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\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 userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\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')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\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, exited;\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); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\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 if (domain && !exited) domain.exit();\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 global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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","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","// 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","// 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","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-res')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('data-res');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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","// 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","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\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","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\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","// @@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","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","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/_export.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/_iobject.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/es6.array.find.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.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/_string-ws.js","node_modules/core-js/modules/_string-trim.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/es6.number.constructor.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.keys.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.includes.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_invoke.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/_user-agent.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.number.is-nan.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","node_modules/core-js/modules/es6.regexp.constructor.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","node_modules/core-js/modules/_math-sign.js","src/js/utils/loadImage.js","node_modules/core-js/modules/es6.math.sign.js","src/js/ui.js","src/js/listeners.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["window","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","Error","e","event","params","evt","origPrevent","bubbles","detail","undefined","document","createEvent","initCustomEvent","call","this","Object","defineProperty","get","prototype","Event","global","iteratorSupported","Symbol","iterator","error","checkIfIteratorIsSupported","createIterator","items","next","value","shift","done","serializeParam","encodeURIComponent","replace","deserializeParam","decodeURIComponent","URLSearchParams","toString","searchString","writable","_fromString","_this","forEach","name","append","proto","_entries","push","delete","getAll","slice","has","set","callback","thisArg","entries","hasOwnProperty","i","length","keys","values","searchArray","join","enumerable","configurable","attribute","attributes","split","polyfillURLSearchParams","sort","a","b","self","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","String","baseElement","doc","location","implementation","createHTMLDocument","createElement","head","appendChild","indexOf","err","anchorElement","body","protocol","test","TypeError","search","enableSearchUpdate","enableSearchParamsUpdate","methodName","method","apply","arguments","attributeName","_anchorElement","linkURLWithAnchorAttribute","_updateSearchParams","defineProperties","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","port","hostname","password","username","createObjectURL","blob","revokeObjectURL","polyfillURL","getOrigin","setInterval","_aFunction","it","_ctx","fn","that","aFunction","c","module","exports","Math","Function","__g","core","version","__e","_isObject","_anObject","isObject","_fails","exec","_descriptors","require$$0","is","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","val","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","_propertyDesc","bitmap","_hide","object","key","f","createDesc","_has","id","px","random","_uid","concat","SRC","$toString","TPL","inspectSource","safe","isFunction","hide","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","_export","_defined","_toObject","defined","_iterCall","ret","_iterators","store","mode","copyright","USE_SYMBOL","uid","ITERATOR","ArrayProto","Array","_isArrayIter","Iterators","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_createProperty","index","$defineProperty","_cof","TAG","ARG","cof","_classof","T","tryGet","callee","core_getIteratorMethod","getIteratorMethod","classof","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","from","arrayLike","result","step","toObject","C","aLen","mapfn","mapping","iterFn","getIterFn","isArrayIter","toLength","createProperty","_iobject","propertyIsEnumerable","_isArray","isArray","arg","SPECIES","_arraySpeciesCreate","original","constructor","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","asc","$this","callbackfn","res","IObject","UNSCOPABLES","_addToUnscopables","$find","forced","find","_toIobject","gOPD","getOwnPropertyDescriptor","toIObject","pIE","check","setPrototypeOf","buggy","__proto__","_inheritIfRequired","max","_arrayIncludes","IS_INCLUDES","el","fromIndex","toAbsoluteIndex","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_stringWs","space","spaces","ltrim","RegExp","rtrim","exporter","KEY","ALIAS","FORCE","fails","trim","string","_stringTrim","_objectKeys","enumBugKeys","_objectDps","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","src","contentWindow","open","write","lt","close","_objectCreate","dPs","gOPN","$trim","require$$3","$Number","Base","BROKEN_COF","require$$4","TRIM","toNumber","argument","third","radix","maxCode","first","charCodeAt","NaN","code","digits","l","parseInt","inheritIfRequired","require$$5","j","require$$6","MATCH","_isRegexp","isRegExp","_stringContext","NAME","_failsIsRegexp","re","includes","context","$includes","_fixReWks","SYMBOL","wks","fns","strfn","rxfn","SEARCH","$search","regexp","_flags","ignoreCase","multiline","unicode","sticky","flags","define","DESCRIPTORS","$flags","_iterStep","def","_setToStringTag","tag","stat","IteratorPrototype","_iterCreate","Constructor","descriptor","setToStringTag","ObjectProto","_objectGpo","getPrototypeOf","BUGGY","returnThis","_iterDefine","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","es6_array_iterator","iterated","_t","_i","_k","Arguments","addToUnscopables","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","$iterators","$at","TO_STRING","pos","s","charAt","point","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","k","getSymbols","gOPS","isEnum","_redefineAll","_anInstance","forbiddenField","BREAK","RETURN","iterable","_validateCollection","arrayFind","createArrayMethod","arrayFindIndex","uncaughtFrozenStore","_l","UncaughtFrozenStore","findUncaughtFrozen","entry","splice","_collectionWeak","getConstructor","wrapper","ADDER","anInstance","forOf","redefineAll","data","validate","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","$iterDetect","BUGGY_ZERO","$instance","clear","setStrong","freeze","_f","SPLIT","$split","_split","$push","NPCG","separator","limit","separator2","match","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","_objectToArray","isEntries","$values","REPLACE","$replace","searchValue","replaceValue","defer","channel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","args","un","invoke","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","v","navigator","_userAgent","userAgent","_setSpecies","task","microtask","last","notify","flush","parent","domain","exit","enter","standalone","then","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","executor","onFulfilled","onRejected","D","catch","r","capability","x","promiseCapability","promiseResolve","require$$7","all","remaining","$index","alreadyCalled","race","$startsWith","startsWith","number","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","Number","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","keyboardEvent","KeyboardEvent","cue","TextTrackCue","VTTCue","track","TextTrack","supportsPassiveListeners","supported","options","removeEventListener","toggleListener","passive","capture","events","eventListeners","on","off","once","onceCallback","_len","_key","triggerEvent","plyr","dispatchEvent","wrap","elements","targets","reverse","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","setAttributes","filter","_ref","_slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","className","parts","class","toggleHidden","hidden","removeAttribute","toggleClass","force","map","classList","contains","hasClass","matches","querySelectorAll","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","preventScroll","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","repaint","offsetHeight","range","browser","isIE","documentMode","isWebkit","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getAttribute","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","readyState","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","item","getDeep","path","reduce","obj","sources","_defineProperty","$RegExp","re1","re2","CORRECT_NEW","p","tiRE","piRE","fiU","proxy","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","enabled","storage","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","request","XMLHttpRequest","responseText","response","status","send","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","content","getHours","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","children","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","_this9","aria-haspopup","aria-controls","aria-expanded","inner","home","backButton","urls","isEmbed","inject","_this10","seektime","addProperty","controlPressed","_this$config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_this$captions","currentTrackNode","languageExists","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","onChange","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","y","scrollY","scrollTo","overflow","viewport","property","hasProperty","cleanupViewport","part","Fullscreen","prefix","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","_mathSign","sign","loadImage","minWidth","image","Image","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","rect","currentTarget","hasAttribute","seekTo","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","abs","FProto","nameRE","$match","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","subscribe","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split$map2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","h","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","_vimeo$ratio$split$ma2","dimension","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","snippet","currentId","posterSrc","playerVars","hl","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","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","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","getProviderByUrl","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","curr","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.polyfilled.min.js","sourcesContent":["// 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\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\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(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\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","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n\r\n if (typeof searchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n this._entries = {};\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n if (typeof URLSearchParams.prototype.sort !== 'function') {\r\n URLSearchParams.prototype.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\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","// 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.7' };\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","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","// 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","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\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","module.exports = {};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\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","// 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","// 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","'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","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\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","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","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","'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","// 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.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","'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","exports.f = {}.propertyIsEnumerable;\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 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","// 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","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 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","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\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","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\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.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","// 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.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// 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","'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","// @@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';\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';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\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 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","// 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","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\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 = $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 && typeof IteratorPrototype[ITERATOR] != 'function') 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 $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","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 $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\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","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","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","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 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 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 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","// 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","// @@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","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 $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-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","// @@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","// 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","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","// 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","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 // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\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 userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\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')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\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, exited;\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); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\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 if (domain && !exited) domain.exit();\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 global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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","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","// 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","// 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","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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 hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: '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(inputType) {\n const [mediaType] = inputType.split('/');\n let type = inputType;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\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 // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: 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 HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('data-size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('data-res'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('data-res')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\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 removeElement(html5.getSources.call(this));\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 html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 try {\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 window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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 } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 // 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.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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 attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\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 (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!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 input\n const input = createElement(\n 'input',\n extend(\n 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 // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\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 input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${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 attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\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 (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!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 // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = 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 controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\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 !is.element(this.elements.inputs.seek) ||\n !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.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (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 controls.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 (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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 = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = 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 controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.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 // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !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\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\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\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\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 = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu 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 && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\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 removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\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.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, 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 toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', 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 = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\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 = createElement(\n 'span',\n {\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 // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\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 volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\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') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\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 // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\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 // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\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.cors) {\n 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 // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\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: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (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 (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\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 (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\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 url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\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 // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: 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 // Reset to start when playback ended\n resetOnEnd: 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.4.7/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: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\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: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\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: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\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 // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\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 download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: '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 fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: 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 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\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 fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\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 loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\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 type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\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 display: {\n time: 'plyr__time',\n },\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 // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\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\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function 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{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\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 (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n 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 toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\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 this.property = Fullscreen.property;\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 on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\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 hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : 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 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 this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\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 || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\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","// 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","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\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","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n 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 this.listeners.media();\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 (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\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 setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].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 // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\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","// @@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","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Get aspect ratio for dimensions\nfunction 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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n 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 (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\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 [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n const padding = (100 / x) * y;\n vimeo.padding = padding;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\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 // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = 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 (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, vimeo.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Set height/width on fullscreen\n player.on('enterfullscreen exitfullscreen', event => {\n const { target } = player.fullscreen;\n\n // Ignore for iOS native\n if (target !== player.elements.container) {\n return;\n }\n\n const toggle = event.type === 'enterfullscreen';\n const [x, y] = vimeo.ratio.split(':').map(Number);\n const dimension = x > y ? 'width' : 'height';\n\n target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n 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 (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 (!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 (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 = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\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 hl: player.config.hl, // iframe interface language\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 // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: '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 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: '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 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\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 triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\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 assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\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 // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.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 // 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 triggerEvent.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 = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.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 triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = 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 triggerEvent.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 clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.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 clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\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 -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\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 triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n 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 toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\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 { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\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 // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\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 // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\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 = createElement('div', {\n class: this.player.config.classNames.ads,\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(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\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 = this.tagUrl;\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 // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\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 clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = 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(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\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 = event.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 if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = 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\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.trigger('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 const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\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.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\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\n // Fire event\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\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\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\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.warn('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 if (is.empty(this.cuePoints)) {\n return;\n }\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 if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\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 this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .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 .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\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 the advertisement container\n this.elements.container.style.zIndex = 3;\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.trigger('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\n .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('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\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 if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\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 (!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 source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n 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 (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (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 (!is.empty(input.poster)) {\n this.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.playsinline) {\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', 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 (Object.keys(input).includes('tracks')) {\n source.insertElements.call(this, 'track', input.tracks);\n }\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 if (this.isHTML5) {\n // Load HTML5 sources\n this.media.load();\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.4.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\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 // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (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) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.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 captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\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 (is.nullOrUndefined(this.media) || !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 const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\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\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 (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\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 if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = 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 (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') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = 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.playsinline);\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 this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\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 (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\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 on.call(this, 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 // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.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 || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(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 = 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 if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\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 - (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 + (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 // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\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 buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(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 = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\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 (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!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 manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(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 + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\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 (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!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 Boolean(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 (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!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 Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\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 = 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 Boolean(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 * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!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 = 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 Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).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 // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\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 // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\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 // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\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 on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, 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 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 if (!this.ready) {\n return;\n }\n\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 removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n 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 (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\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 }\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 loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file