aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--changelog.md2
-rw-r--r--dist/plyr.js2
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js2
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--package.json2
-rw-r--r--readme.md8
-rw-r--r--src/js/defaults.js2
-rw-r--r--src/js/plyr.js2
-rw-r--r--src/js/plyr.polyfilled.js2
14 files changed, 17 insertions, 17 deletions
diff --git a/changelog.md b/changelog.md
index a4531352..1e20d19f 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,4 @@
-# v3.3.11
+# v3.3.12
- Fix synthetic event bubble/proxy loses detail (thanks @friday!)
- Make utils static (thanks @friday!)
diff --git a/dist/plyr.js b/dist/plyr.js
index 24b816f3..4dc8a6e2 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -3684,7 +3684,7 @@ var defaults$1 = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.11/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 2fb20882..2748fa8d 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","querySelectorAll","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","createMenuItem","getLabel","updateSetting","pane","currentTrack","default","tracks","getTracks","track","active","language","unshift","bind","speed","isVimeo","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","userLanguage","setLanguage","trackEvents","meta","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","toggleCaptions","getCurrentTrack","embed","enableTextTrack","has","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","changed","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","eventType","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","stripHTML","getPaused","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.11/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.11\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","querySelectorAll","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","createMenuItem","getLabel","updateSetting","pane","currentTrack","default","tracks","getTracks","track","active","language","unshift","bind","speed","isVimeo","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","userLanguage","setLanguage","trackEvents","meta","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","toggleCaptions","getCurrentTrack","embed","enableTextTrack","has","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","changed","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","eventType","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","stripHTML","getPaused","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.12/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.12\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index 2c0ff45e..ea7c275c 100644
--- a/dist/plyr.min.js
+++ b/dist/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";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(l=o.createElement("link")).rel="stylesheet",l.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=p:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return r(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,l=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<l;s++)r(e[s],n,i)}(e,function(e){a(o,e),s(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,l=[],o=e.length,c=o;for(s=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)a=e[o],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),l},l.done=function(e){s(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{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}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return u.getConstructor(e)===Object},number:function(e){return u.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return u.getConstructor(e)===String},boolean:function(e){return u.getConstructor(e)===Boolean},function:function(e){return u.getConstructor(e)===Function},array:function(e){return!u.is.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return u.is.instanceof(e,WeakMap)},nodeList:function(e){return u.is.instanceof(e,NodeList)},element:function(e){return u.is.instanceof(e,Element)},textNode:function(e){return u.getConstructor(e)===Text},event:function(e){return u.is.instanceof(e,Event)},cue:function(e){return u.is.instanceof(e,window.TextTrackCue)||u.is.instanceof(e,window.VTTCue)},track:function(e){return u.is.instanceof(e,TextTrack)||!u.is.nullOrUndefined(e)&&u.is.string(e.kind)},url:function(e){return!u.is.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return u.is.nullOrUndefined(e)||(u.is.string(e)||u.is.array(e)||u.is.nodeList(e))&&!e.length||u.is.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)}},getConstructor:function(e){return u.is.nullOrUndefined(e)?null:e.constructor},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return null!==document.getElementById(t)},s=function(e,t){e.innerHTML=t,i&&n()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!n()){var a=l.supported,r=document.createElement("div");if(u.toggleHidden(r,!0),i&&r.setAttribute("id",t),a){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var c=JSON.parse(o);s(r,c.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(a&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s(r,e))}).catch(function(){})}}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.innerText=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=r(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var r=t.split(" "),l=a;d.passiveListeners&&(l={passive:s,capture:a}),r.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return u.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=u.getHours(e),a=u.getMinutes(e),r=u.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(r)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){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()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=u.parseUrl(e).search);return u.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=r(i,2),s=n[0],l=n[1];return Object.assign(e,a({},s,decodeURIComponent(l)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getHTML:function(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),r=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||r);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||r);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,r=e.playing;e.media.src=s[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=a,e.off("loadedmetadata",t)}),e.media.load(),r&&e.play(),u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t))return"";var i=u.getDeep(t.i18n,e);if(u.is.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=r(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,r=void 0,l=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",o="pause",l="play",c="pause";break;case"mute":a=!0,r="mute",o="unmute",l="volume",c="muted";break;case"captions":a=!0,r="enableCaptions",o="disableCaptions",l="captions-off",c="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",o="exitFullscreen",l="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",l="play";break;default:r=s,l=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,r,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,l)),i.appendChild(g.createLabel.call(this,r))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.innerText="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e){var t=e.value,i=e.list,n=e.type,s=e.title,a=e.badge,r=void 0===a?null:a,l=e.checked,o=void 0!==l&&l,c=u.createElement("li"),d=u.createElement("label",{class:this.config.classNames.control}),p=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:t,checked:o,class:"plyr__sr-only"})),h=u.createElement("span",{hidden:""});d.appendChild(p),d.appendChild(h),d.insertAdjacentHTML("beforeend",s),u.is.element(r)&&d.appendChild(r),c.appendChild(d),i.appendChild(c)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.innerText=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){g.createMenuItem.call(t,{value:e,list:i,type:"quality",title:g.getLabel.call(t,"quality",e),badge:function(e){var i=h("qualityBadge."+e,t.config);return i.length?g.createBadge.call(t,i):null}(e)})}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"&times;";case"quality":if(u.is.number(t)){var i=h("qualityLabel."+t,this.config);return i.length?i:t+"p"}return u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.currentTrack;break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var r=a&&a.querySelector('input[value="'+s+'"]');u.is.element(r)&&(r.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this);if(g.toggleTab.call(this,"captions",i.length),u.emptyElement(t),g.checkMenu.call(this),i.length){var n=i.map(function(i,n){return{value:n,checked:e.captions.active&&e.currentTrack===n,title:f.getLabel.call(e,i),badge:i.language&&g.createBadge.call(e,i.language.toUpperCase()),list:t,type:"language"}});n.unshift({value:-1,checked:!this.captions.active,title:h("disabled",this.config),list:t,type:"language"}),n.forEach(g.createMenuItem.bind(this)),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.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=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){g.createMenuItem.call(t,{value:e,list:n,type:"speed",title:g.getLabel.call(t,"speed",e)})}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var r=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(r).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var r=u.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input),this.elements.volume=r,i.appendChild(r)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=r(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{if(u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}var t=this.storage.get("captions");u.is.boolean(t)||(t=this.config.captions.active);var i=this.storage.get("language")||this.config.captions.language;if("auto"===i){var n=(navigator.language||navigator.userLanguage).split("-");i=r(n,1)[0]}if(f.setLanguage.call(this,i,t),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";u.on(this.media.textTracks,s,f.update.bind(this))}setTimeout(f.update.bind(this),0)}},update:function(){var e=this,t=f.getTracks.call(this,!0),i=this.captions,n=i.language,s=i.meta;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",u.on(t,"cuechange",function(){return f.updateCues.call(e)})});var a=!t.find(function(t){return t===e.captions.currentTrackNode}),r=this.language!==n&&t.find(function(e){return e.language===n});(a||r)&&f.setLanguage.call(this,n,this.config.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=f.getTracks.call(this);if(-1!==e)if(u.is.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var s=f.getCurrentTrack.call(this),a=(s||{}).language;this.captions.currentTrackNode=s,t&&(this.captions.language=a),this.isVimeo&&this.embed.enableTextTrack(a),u.dispatchEvent.call(this,this.media,"languagechange")}this.isHTML5&&this.isVideo&&f.updateCues.call(this),i&&this.toggleCaptions(!0)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else this.toggleCaptions(!1)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(u.is.string(e)){this.captions.language=e.toLowerCase();var i=f.getTracks.call(this),n=f.getCurrentTrack.call(this,!0);f.set.call(this,i.indexOf(n),!1,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(i){return!e.isHTML5||t||e.captions.meta.has(i)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=f.getTracks.call(this),n=function(t){return Number((e.captions.meta.get(t)||{}).default)},s=Array.from(i).sort(function(e,t){return n(t)-n(e)});return!t&&i[this.currentTrack]||s.find(function(t){return t.language===e.captions.language})||s[0]},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions))if(u.is.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var i=f.getCurrentTrack.call(this);t=Array.from((i||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(u.getHTML)}var n=t.map(function(e){return e.trim()}).join("\n");if(n!==this.elements.captions.innerHTML){u.emptyElement(this.elements.captions);var s=u.createElement("span",u.getAttributesFromSelector(this.config.selectors.caption));s.innerHTML=n,this.elements.captions.appendChild(s),u.dispatchEvent.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.11/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"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",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",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:{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,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","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"]',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",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",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:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.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[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.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(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),this.isHTML5&&f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&C.setPoster.call(this,this.poster),this.config.duration&&g.durationUpdate.call(this)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){u.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!u.is.element(this.elements.poster))return Promise.reject();var i=u.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),C.togglePoster.call(t,!0),e});return i.catch(function(){return C.togglePoster.call(t,!1)}),i},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||C.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(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),C.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},S=u.getBrowser(),P=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&a!==this.player.elements.inputs.seek&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(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.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),u.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(C.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking seeked",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing seeking seeked",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i=t.detail,n=void 0===i?{}:i;"error"===t.type&&(n=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],l=e.player.config.listeners[a],o=u.is.function(l);u.on(t,n,function(e){return i(e,s,a)},r&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.currentTrack=Number(t.target.value),n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),n(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=t.keyCode?t.keyCode:t.which,s=t.type;if("keydown"!==s&&"keyup"!==s||39===n||37===n){var a=i.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);a&&r?(i.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}}),n(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");u.is.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,s=i.elements,a=i.timers;if(u.toggleClass(s.controls,n.classNames.noTransition,"focusin"===t.type),C.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){u.toggleClass(s.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},r)}}),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function N(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.Vimeo)?L.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){L.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),r=u.createElement("iframe"),l=u.format(t.config.urls.vimeo.iframe,a,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(r),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",C.setPoster.call(t,i.href)}}),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 N.call(t,!0),t.embed.play()},t.media.pause=function(){return N.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 i=t.embed,n=t.media,s=t.paused,a=t.volume,r=s&&!i.hasPlayed;n.seeking=!0,u.dispatchEvent.call(t,n,"seeking"),Promise.resolve(r&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return r&&i.pause()}).then(function(){return r&&i.setVolume(a)}).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,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);L.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=e.cues,n=(void 0===i?[]:i).map(function(e){return u.stripHTML(e.text)});f.updateCues.call(t,n)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){N.call(t,!e),e||u.dispatchEvent.call(t,t.media,"playing")}),u.is.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){N.call(t,!0),u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){N.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function x(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function M(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var I={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),I.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?I.ready.call(this):(u.loadScript(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(){I.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media);var r=function(e){return"https://img.youtube.com/vi/"+n+"/"+e+"default.jpg"};u.loadImage(r("maxres"),121).catch(function(){return u.loadImage(r("sd"),121)}).catch(function(){return u.loadImage(r("hq"))}).then(function(t){return C.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;I.getTitle.call(e,n),e.media.play=function(){M.call(e,!0),i.playVideo()},e.media.pause=function(){M.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return x(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(x(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,u.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:M.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(M.call(e,!0),u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return x(e)})))));break;case 2:e.muted||e.embed.unMute(),M.call(e,!1)}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},_={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":I.setup.call(this);break;case"vimeo":L.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},q=function(){function e(t){var i=this;n(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){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(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=u.createElement("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 i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}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=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(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:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.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,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),H={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.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","")),C.addStyleHook.call(t),t.isHTML5&&H.insertElements.call(t,"source",e.sources),t.config.title=e.title,_.setup.call(t),t.isHTML5&&("tracks"in e&&H.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},O=function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,e.defaults,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var r=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(r){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=r,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("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=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new P(this),this.storage=new l(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),_.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new q(this),this.config.autoplay&&this.play()):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 s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);u.toggleState(this.elements.buttons.captions,t),u.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=u.hasClass(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=u.toggleClass(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)&&g.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";u.dispatchEvent.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.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=u.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.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||0;return e||t}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.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;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.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){H.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?C.setPoster.call(this,e):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=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){f.set.call(this,e)},get:function(){var e=this.captions,t=e.active,i=e.currentTrack;return t?i:-1}},{key:"language",set:function(e){f.setLanguage.call(this,e)},get:function(){return(f.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(u.is.element)),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return O.defaults=u.cloneDeep(b),O});
+"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";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(l=o.createElement("link")).rel="stylesheet",l.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=p:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return r(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,l=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<l;s++)r(e[s],n,i)}(e,function(e){a(o,e),s(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,l=[],o=e.length,c=o;for(s=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)a=e[o],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),l},l.done=function(e){s(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{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}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return u.getConstructor(e)===Object},number:function(e){return u.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return u.getConstructor(e)===String},boolean:function(e){return u.getConstructor(e)===Boolean},function:function(e){return u.getConstructor(e)===Function},array:function(e){return!u.is.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return u.is.instanceof(e,WeakMap)},nodeList:function(e){return u.is.instanceof(e,NodeList)},element:function(e){return u.is.instanceof(e,Element)},textNode:function(e){return u.getConstructor(e)===Text},event:function(e){return u.is.instanceof(e,Event)},cue:function(e){return u.is.instanceof(e,window.TextTrackCue)||u.is.instanceof(e,window.VTTCue)},track:function(e){return u.is.instanceof(e,TextTrack)||!u.is.nullOrUndefined(e)&&u.is.string(e.kind)},url:function(e){return!u.is.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return u.is.nullOrUndefined(e)||(u.is.string(e)||u.is.array(e)||u.is.nodeList(e))&&!e.length||u.is.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)}},getConstructor:function(e){return u.is.nullOrUndefined(e)?null:e.constructor},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return null!==document.getElementById(t)},s=function(e,t){e.innerHTML=t,i&&n()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!n()){var a=l.supported,r=document.createElement("div");if(u.toggleHidden(r,!0),i&&r.setAttribute("id",t),a){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var c=JSON.parse(o);s(r,c.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(a&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s(r,e))}).catch(function(){})}}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.innerText=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=r(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var r=t.split(" "),l=a;d.passiveListeners&&(l={passive:s,capture:a}),r.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return u.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=u.getHours(e),a=u.getMinutes(e),r=u.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(r)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){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()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=u.parseUrl(e).search);return u.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=r(i,2),s=n[0],l=n[1];return Object.assign(e,a({},s,decodeURIComponent(l)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getHTML:function(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),r=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||r);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||r);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,r=e.playing;e.media.src=s[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=a,e.off("loadedmetadata",t)}),e.media.load(),r&&e.play(),u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t))return"";var i=u.getDeep(t.i18n,e);if(u.is.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=r(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,r=void 0,l=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",o="pause",l="play",c="pause";break;case"mute":a=!0,r="mute",o="unmute",l="volume",c="muted";break;case"captions":a=!0,r="enableCaptions",o="disableCaptions",l="captions-off",c="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",o="exitFullscreen",l="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",l="play";break;default:r=s,l=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,r,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,l)),i.appendChild(g.createLabel.call(this,r))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.innerText="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e){var t=e.value,i=e.list,n=e.type,s=e.title,a=e.badge,r=void 0===a?null:a,l=e.checked,o=void 0!==l&&l,c=u.createElement("li"),d=u.createElement("label",{class:this.config.classNames.control}),p=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:t,checked:o,class:"plyr__sr-only"})),h=u.createElement("span",{hidden:""});d.appendChild(p),d.appendChild(h),d.insertAdjacentHTML("beforeend",s),u.is.element(r)&&d.appendChild(r),c.appendChild(d),i.appendChild(c)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.innerText=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){g.createMenuItem.call(t,{value:e,list:i,type:"quality",title:g.getLabel.call(t,"quality",e),badge:function(e){var i=h("qualityBadge."+e,t.config);return i.length?g.createBadge.call(t,i):null}(e)})}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"&times;";case"quality":if(u.is.number(t)){var i=h("qualityLabel."+t,this.config);return i.length?i:t+"p"}return u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.currentTrack;break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var r=a&&a.querySelector('input[value="'+s+'"]');u.is.element(r)&&(r.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this);if(g.toggleTab.call(this,"captions",i.length),u.emptyElement(t),g.checkMenu.call(this),i.length){var n=i.map(function(i,n){return{value:n,checked:e.captions.active&&e.currentTrack===n,title:f.getLabel.call(e,i),badge:i.language&&g.createBadge.call(e,i.language.toUpperCase()),list:t,type:"language"}});n.unshift({value:-1,checked:!this.captions.active,title:h("disabled",this.config),list:t,type:"language"}),n.forEach(g.createMenuItem.bind(this)),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.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=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){g.createMenuItem.call(t,{value:e,list:n,type:"speed",title:g.getLabel.call(t,"speed",e)})}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var r=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(r).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var r=u.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input),this.elements.volume=r,i.appendChild(r)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=r(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{if(u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}var t=this.storage.get("captions");u.is.boolean(t)||(t=this.config.captions.active);var i=this.storage.get("language")||this.config.captions.language;if("auto"===i){var n=(navigator.language||navigator.userLanguage).split("-");i=r(n,1)[0]}if(f.setLanguage.call(this,i,t),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";u.on(this.media.textTracks,s,f.update.bind(this))}setTimeout(f.update.bind(this),0)}},update:function(){var e=this,t=f.getTracks.call(this,!0),i=this.captions,n=i.language,s=i.meta;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",u.on(t,"cuechange",function(){return f.updateCues.call(e)})});var a=!t.find(function(t){return t===e.captions.currentTrackNode}),r=this.language!==n&&t.find(function(e){return e.language===n});(a||r)&&f.setLanguage.call(this,n,this.config.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=f.getTracks.call(this);if(-1!==e)if(u.is.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var s=f.getCurrentTrack.call(this),a=(s||{}).language;this.captions.currentTrackNode=s,t&&(this.captions.language=a),this.isVimeo&&this.embed.enableTextTrack(a),u.dispatchEvent.call(this,this.media,"languagechange")}this.isHTML5&&this.isVideo&&f.updateCues.call(this),i&&this.toggleCaptions(!0)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else this.toggleCaptions(!1)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(u.is.string(e)){this.captions.language=e.toLowerCase();var i=f.getTracks.call(this),n=f.getCurrentTrack.call(this,!0);f.set.call(this,i.indexOf(n),!1,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(i){return!e.isHTML5||t||e.captions.meta.has(i)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=f.getTracks.call(this),n=function(t){return Number((e.captions.meta.get(t)||{}).default)},s=Array.from(i).sort(function(e,t){return n(t)-n(e)});return!t&&i[this.currentTrack]||s.find(function(t){return t.language===e.captions.language})||s[0]},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions))if(u.is.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var i=f.getCurrentTrack.call(this);t=Array.from((i||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(u.getHTML)}var n=t.map(function(e){return e.trim()}).join("\n");if(n!==this.elements.captions.innerHTML){u.emptyElement(this.elements.captions);var s=u.createElement("span",u.getAttributesFromSelector(this.config.selectors.caption));s.innerHTML=n,this.elements.captions.appendChild(s),u.dispatchEvent.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"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",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",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:{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,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","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"]',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",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",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:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.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[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.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(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),this.isHTML5&&f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&C.setPoster.call(this,this.poster),this.config.duration&&g.durationUpdate.call(this)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){u.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!u.is.element(this.elements.poster))return Promise.reject();var i=u.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),C.togglePoster.call(t,!0),e});return i.catch(function(){return C.togglePoster.call(t,!1)}),i},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||C.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(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),C.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},S=u.getBrowser(),P=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&a!==this.player.elements.inputs.seek&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(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.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),u.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(C.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking seeked",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing seeking seeked",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i=t.detail,n=void 0===i?{}:i;"error"===t.type&&(n=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],l=e.player.config.listeners[a],o=u.is.function(l);u.on(t,n,function(e){return i(e,s,a)},r&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.currentTrack=Number(t.target.value),n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),n(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=t.keyCode?t.keyCode:t.which,s=t.type;if("keydown"!==s&&"keyup"!==s||39===n||37===n){var a=i.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);a&&r?(i.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}}),n(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");u.is.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,s=i.elements,a=i.timers;if(u.toggleClass(s.controls,n.classNames.noTransition,"focusin"===t.type),C.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){u.toggleClass(s.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},r)}}),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function N(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.Vimeo)?L.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){L.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),r=u.createElement("iframe"),l=u.format(t.config.urls.vimeo.iframe,a,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(r),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",C.setPoster.call(t,i.href)}}),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 N.call(t,!0),t.embed.play()},t.media.pause=function(){return N.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 i=t.embed,n=t.media,s=t.paused,a=t.volume,r=s&&!i.hasPlayed;n.seeking=!0,u.dispatchEvent.call(t,n,"seeking"),Promise.resolve(r&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return r&&i.pause()}).then(function(){return r&&i.setVolume(a)}).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,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);L.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=e.cues,n=(void 0===i?[]:i).map(function(e){return u.stripHTML(e.text)});f.updateCues.call(t,n)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){N.call(t,!e),e||u.dispatchEvent.call(t,t.media,"playing")}),u.is.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){N.call(t,!0),u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){N.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function x(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function M(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var I={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),I.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?I.ready.call(this):(u.loadScript(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(){I.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media);var r=function(e){return"https://img.youtube.com/vi/"+n+"/"+e+"default.jpg"};u.loadImage(r("maxres"),121).catch(function(){return u.loadImage(r("sd"),121)}).catch(function(){return u.loadImage(r("hq"))}).then(function(t){return C.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;I.getTitle.call(e,n),e.media.play=function(){M.call(e,!0),i.playVideo()},e.media.pause=function(){M.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return x(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(x(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,u.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:M.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(M.call(e,!0),u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return x(e)})))));break;case 2:e.muted||e.embed.unMute(),M.call(e,!1)}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},_={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":I.setup.call(this);break;case"vimeo":L.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},q=function(){function e(t){var i=this;n(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){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(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=u.createElement("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 i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}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=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(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:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.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,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),H={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.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","")),C.addStyleHook.call(t),t.isHTML5&&H.insertElements.call(t,"source",e.sources),t.config.title=e.title,_.setup.call(t),t.isHTML5&&("tracks"in e&&H.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},O=function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,e.defaults,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var r=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(r){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=r,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("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=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new P(this),this.storage=new l(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),_.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new q(this),this.config.autoplay&&this.play()):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 s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);u.toggleState(this.elements.buttons.captions,t),u.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=u.hasClass(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=u.toggleClass(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)&&g.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";u.dispatchEvent.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.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=u.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.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||0;return e||t}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.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;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.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){H.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?C.setPoster.call(this,e):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=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){f.set.call(this,e)},get:function(){var e=this.captions,t=e.active,i=e.currentTrack;return t?i:-1}},{key:"language",set:function(e){f.setLanguage.call(this,e)},get:function(){return(f.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(u.is.element)),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return O.defaults=u.cloneDeep(b),O});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index 9e91a5b3..08c35805 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","this","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","minWidth","image","Image","handler","naturalWidth","assign","id","hasId","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","toggleHidden","setAttribute","cached","prefix","content","fetch","then","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","insertBefore","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","obj","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","_ref$badge","checked","_ref$checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","createMenuItem","getLabel","createBadge","getBadge","updateSetting","pane","currentTrack","default","tracks","getTracks","track","_this4","active","language","unshift","bind","speed","isVimeo","_this5","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","_ref3","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","userLanguage","setLanguage","trackEvents","_captions","meta","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","getCurrentTrack","embed","enableTextTrack","toggleCaptions","has","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","eventType","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","_ref$cues","stripHTML","getPaused","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.11/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.11\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","this","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","minWidth","image","Image","handler","naturalWidth","assign","id","hasId","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","toggleHidden","setAttribute","cached","prefix","content","fetch","then","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","insertBefore","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","obj","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","_ref$badge","checked","_ref$checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","createMenuItem","getLabel","createBadge","getBadge","updateSetting","pane","currentTrack","default","tracks","getTracks","track","_this4","active","language","unshift","bind","speed","isVimeo","_this5","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","_ref3","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","userLanguage","setLanguage","trackEvents","_captions","meta","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","getCurrentTrack","embed","enableTextTrack","toggleCaptions","has","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","eventType","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","_ref$cues","stripHTML","getPaused","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.12/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.12\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index eeb857d0..fa2e8b7b 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -9067,7 +9067,7 @@ var defaults$1 = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.11/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index 41acc985..7a930a91 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","prefix","hasId","isCached","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","querySelectorAll","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","createMenuItem","getLabel","updateSetting","pane","currentTrack","default","tracks","getTracks","track","active","language","unshift","speed","isVimeo","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","userLanguage","setLanguage","trackEvents","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","toggleCaptions","getCurrentTrack","embed","enableTextTrack","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","changed","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","eventType","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","stripHTML","getPaused","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":";;;;;;;;;;;;;;AACA,IAAI,MAAM,GAAG,cAAc,GAAG,OAAO,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI;IAC7E,MAAM,GAAG,OAAO,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI;;IAE/D,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;AAC9B,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC;;;;ACLzC,IAAI,IAAI,GAAG,cAAc,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACjD,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;;;;ACDvC,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,OAAO,EAAE,KAAK,QAAQ,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,EAAE,KAAK,UAAU,CAAC;CACxE,CAAC;;ACDF,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,CAACA,SAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC;EAC9D,OAAO,EAAE,CAAC;CACX,CAAC;;ACJF,UAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI;IACF,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;GACjB,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,IAAI,CAAC;GACb;CACF,CAAC;;ACNF;AACA,gBAAc,GAAG,CAACC,MAAmB,CAAC,YAAY;EAChD,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAClF,CAAC,CAAC;;ACFH,IAAIC,UAAQ,GAAGD,OAAoB,CAAC,QAAQ,CAAC;;AAE7C,IAAI,EAAE,GAAGD,SAAQ,CAACE,UAAQ,CAAC,IAAIF,SAAQ,CAACE,UAAQ,CAAC,aAAa,CAAC,CAAC;AAChE,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,GAAGA,UAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;CAC7C,CAAC;;ACNF,iBAAc,GAAG,CAACD,YAAyB,IAAI,CAACE,MAAmB,CAAC,YAAY;EAC9E,OAAO,MAAM,CAAC,cAAc,CAACC,UAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAC/G,CAAC,CAAC;;ACFH;;;;AAIA,gBAAc,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;EAChC,IAAI,CAACJ,SAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;EAC7B,IAAI,EAAE,EAAE,GAAG,CAAC;EACZ,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EAC7F,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EACvF,IAAI,CAAC,CAAC,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EAC9F,MAAM,SAAS,CAAC,yCAAyC,CAAC,CAAC;CAC5D,CAAC;;ACRF,IAAI,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;;AAE/B,KAAS,GAAGC,YAAyB,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;EACxGI,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,CAAC,GAAGC,YAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EACzBD,SAAQ,CAAC,UAAU,CAAC,CAAC;EACrB,IAAIE,aAAc,EAAE,IAAI;IACtB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;GAC7B,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,0BAA0B,CAAC,CAAC;EAC5F,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;EACnD,OAAO,CAAC,CAAC;CACV,CAAC;;;;;;ACfF,iBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE;EACxC,OAAO;IACL,UAAU,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACzB,YAAY,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IAC3B,QAAQ,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACvB,KAAK,EAAE,KAAK;GACb,CAAC;CACH,CAAC;;ACLF,SAAc,GAAGN,YAAyB,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;EACzE,OAAOO,SAAE,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAEC,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;CAChD,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;EAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACpB,OAAO,MAAM,CAAC;CACf,CAAC;;ACPF,IAAI,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;AACvC,QAAc,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE;EAClC,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC;;ACHF,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,QAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CACvF,CAAC;;;ACDF,IAAI,GAAG,GAAGR,IAAiB,CAAC,KAAK,CAAC,CAAC;AACnC,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;;AAE5CE,KAAkB,CAAC,aAAa,GAAG,UAAU,EAAE,EAAE;EAC/C,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;CAC3B,CAAC;;AAEF,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;EAC7C,IAAI,UAAU,GAAG,OAAO,GAAG,IAAI,UAAU,CAAC;EAC1C,IAAI,UAAU,EAAEO,IAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAIC,KAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;EAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,OAAO;EAC3B,IAAI,UAAU,EAAED,IAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAIC,KAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9F,IAAI,CAAC,KAAKC,OAAM,EAAE;IAChB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GACd,MAAM,IAAI,CAAC,IAAI,EAAE;IAChB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACdD,KAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;GACnB,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;IACjB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GACd,MAAM;IACLA,KAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;GACnB;;CAEF,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,QAAQ,GAAG;EACpD,OAAO,OAAO,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAC;;;AC9BH,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,OAAO,EAAE,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC;EACzE,OAAO,EAAE,CAAC;CACX,CAAC;;ACHF;;AAEA,QAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;EAC3CE,UAAS,CAAC,EAAE,CAAC,CAAC;EACd,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,CAAC;EAClC,QAAQ,MAAM;IACZ,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE;MAC1B,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACzB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE;MAC7B,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;MAChC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/B,CAAC;GACH;EACD,OAAO,yBAAyB;IAC9B,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GAClC,CAAC;CACH,CAAC;;ACdF,IAAI,SAAS,GAAG,WAAW,CAAC;;AAE5B,IAAI,OAAO,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;EAC1C,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAG,SAAS,GAAGD,OAAM,GAAG,SAAS,GAAGA,OAAM,CAAC,IAAI,CAAC,KAAKA,OAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAACA,OAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;EACpH,IAAI,OAAO,GAAG,SAAS,GAAGE,KAAI,GAAGA,KAAI,CAAC,IAAI,CAAC,KAAKA,KAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;EACjE,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;EAC/D,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EACvB,IAAI,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;EAC7B,KAAK,GAAG,IAAI,MAAM,EAAE;;IAElB,GAAG,GAAG,CAAC,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;;IAExD,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;;IAEnC,GAAG,GAAG,OAAO,IAAI,GAAG,GAAGC,IAAG,CAAC,GAAG,EAAEH,OAAM,CAAC,GAAG,QAAQ,IAAI,OAAO,GAAG,IAAI,UAAU,GAAGG,IAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;;IAE/G,IAAI,MAAM,EAAEC,SAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;;IAEzD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,EAAEL,KAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GAC3D;CACF,CAAC;AACFC,OAAM,CAAC,IAAI,GAAGE,KAAI,CAAC;;AAEnB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;AAChB,WAAc,GAAG,OAAO,CAAC;;ACvCzB,IAAI,KAAK,GAAGG,IAAG,CAAC,aAAa,CAAC,CAAC;AAC/B,IAAI,IAAI,GAAGA,IAAG,CAAC,MAAM,CAAC,CAAC;AACvB,IAAI,GAAG,GAAG,CAAC,EAAEL,OAAM,CAAC,WAAW,IAAIA,OAAM,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,GAAG,GAAG,CAAC;AACjB,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,KAAK,CAAC;;AAEV,IAAI,sBAAsB,GAAG;EAC3B,gHAAgH;EAChH,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEb,OAAO,CAAC,GAAG,CAAC,EAAE;EACZ,IAAI,KAAK,GAAGA,OAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAC/CD,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACnCA,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;GACnC,MAAM,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,UAAc,GAAG;EACf,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,KAAK;EACZ,IAAI,EAAE,IAAI;CACX,CAAC;;AC3BF,YAAc,GAAG,KAAK,CAAC;;ACCvB,gBAAc,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;EAC5C,KAAK,IAAI,GAAG,IAAI,GAAG,EAAEK,SAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EAC3D,OAAO,MAAM,CAAC;CACf,CAAC;;ACJF,eAAc,GAAG,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;EAChE,IAAI,EAAE,EAAE,YAAY,WAAW,CAAC,KAAK,cAAc,KAAK,SAAS,IAAI,cAAc,IAAI,EAAE,CAAC,EAAE;IAC1F,MAAM,SAAS,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC;GACnD,CAAC,OAAO,EAAE,CAAC;CACb,CAAC;;ACJF;AACA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;CAC1D,CAAC;;ACLF;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,GAAG,CAAC,GAAG,GAAG,CAACE,UAAS,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;CAC1D,CAAC;;ACLF;;;AAGA,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,EAAE,KAAK,SAAS,EAAE,OAAO,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAGA,UAAS,CAAC,EAAE,CAAC,CAAC;EAC3B,IAAI,MAAM,GAAGC,SAAQ,CAAC,MAAM,CAAC,CAAC;EAC9B,IAAI,MAAM,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;EACzD,OAAO,MAAM,CAAC;CACf,CAAC;;ACTF,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;;AAE3B,QAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;;ACJF;;;AAGA,YAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,EAAE;EAC5E,OAAOC,IAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;CACxD,CAAC;;ACLF;AACA,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,EAAE,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;EACpE,OAAO,EAAE,CAAC;CACX,CAAC;;ACJF;;;AAGA,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAOC,QAAO,CAACC,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7B,CAAC;;ACJF,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAIC,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,oBAAc,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EACxC,KAAK,GAAGL,UAAS,CAAC,KAAK,CAAC,CAAC;EACzB,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,GAAGK,KAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAChE,CAAC;;ACNF;;;;;AAKA,kBAAc,GAAG,UAAU,WAAW,EAAE;EACtC,OAAO,UAAU,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE;IACrC,IAAI,CAAC,GAAGC,UAAS,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,MAAM,GAAGL,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,KAAK,GAAGM,gBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC;;;IAGV,IAAI,WAAW,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,MAAM,GAAG,KAAK,EAAE;MAClD,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;;MAEnB,IAAI,KAAK,IAAI,KAAK,EAAE,OAAO,IAAI,CAAC;;KAEjC,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,WAAW,IAAI,KAAK,IAAI,CAAC,EAAE;MACnE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC,CAAC;KACvD,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;GAC7B,CAAC;CACH,CAAC;;ACrBF,IAAI,MAAM,GAAG,oBAAoB,CAAC;AAClC,IAAI,KAAK,GAAGb,OAAM,CAAC,MAAM,CAAC,KAAKA,OAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACpD,WAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;CACxC,CAAC;;ACLF,IAAI,MAAM,GAAGX,OAAoB,CAAC,MAAM,CAAC,CAAC;;AAE1C,cAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAGgB,IAAG,CAAC,GAAG,CAAC,CAAC,CAAC;CAChD,CAAC;;ACFF,IAAI,YAAY,GAAGhB,cAA4B,CAAC,KAAK,CAAC,CAAC;AACvD,IAAI,QAAQ,GAAGE,UAAwB,CAAC,UAAU,CAAC,CAAC;;AAEpD,uBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE;EACxC,IAAI,CAAC,GAAGqB,UAAS,CAAC,MAAM,CAAC,CAAC;EAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,GAAG,CAAC;EACR,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,QAAQ,EAAEd,IAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;EAEpE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAIA,IAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IACrD,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAChD;EACD,OAAO,MAAM,CAAC;CACf,CAAC;;AChBF;AACA,gBAAc,GAAG;EACf,+FAA+F;EAC/F,KAAK,CAAC,GAAG,CAAC,CAAC;;ACHb;;AAEA,IAAI,UAAU,GAAGT,YAA2B,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;;AAE3E,OAAS,GAAG,MAAM,CAAC,mBAAmB,IAAI,SAAS,mBAAmB,CAAC,CAAC,EAAE;EACxE,OAAOyB,mBAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CAC7B,CAAC;;;;;;ACNF;;AAEA,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,MAAM,CAACJ,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5B,CAAC;;ACCF,cAAc,GAAG,SAAS,IAAI,CAAC,KAAK,mCAAmC;EACrE,IAAI,CAAC,GAAGK,SAAQ,CAAC,IAAI,CAAC,CAAC;EACvB,IAAI,MAAM,GAAGR,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAChC,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;EAC5B,IAAI,KAAK,GAAGM,gBAAe,CAAC,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;EACzE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;EAC9C,IAAI,MAAM,GAAG,GAAG,KAAK,SAAS,GAAG,MAAM,GAAGA,gBAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;EACvE,OAAO,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC1C,OAAO,CAAC,CAAC;CACV,CAAC;;;ACdF,IAAI,KAAK,GAAGxB,OAAoB,CAAC,KAAK,CAAC,CAAC;;AAExC,IAAI,MAAM,GAAGE,OAAoB,CAAC,MAAM,CAAC;AACzC,IAAI,UAAU,GAAG,OAAO,MAAM,IAAI,UAAU,CAAC;;AAE7C,IAAI,QAAQ,GAAG,cAAc,GAAG,UAAU,IAAI,EAAE;EAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;IAChC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,GAAGc,IAAG,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;CAChF,CAAC;;AAEF,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;;;ACVvB,IAAI,GAAG,GAAGhB,SAAuB,CAAC,CAAC,CAAC;;AAEpC,IAAI,GAAG,GAAGE,IAAiB,CAAC,aAAa,CAAC,CAAC;;AAE3C,mBAAc,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;EACxC,IAAI,EAAE,IAAI,CAACO,IAAG,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;CACtG,CAAC;;;ACNF,AACA;;;;;;;;;;;AAWA,IAAI,IAAI,GAAGT,WAAyB,CAAC,CAAC,CAAC;AACvC,IAAI,EAAE,GAAGE,SAAuB,CAAC,CAAC,CAAC;;;AAGnC,IAAI,YAAY,GAAG,aAAa,CAAC;AACjC,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,WAAW,CAAC;AAC5B,IAAI,YAAY,GAAG,eAAe,CAAC;AACnC,IAAI,WAAW,GAAG,cAAc,CAAC;AACjC,IAAI,YAAY,GAAGS,OAAM,CAAC,YAAY,CAAC,CAAC;AACxC,IAAI,SAAS,GAAGA,OAAM,CAAC,SAAS,CAAC,CAAC;AAClC,IAAI,IAAI,GAAGA,OAAM,CAAC,IAAI,CAAC;AACvB,IAAI,UAAU,GAAGA,OAAM,CAAC,UAAU,CAAC;;AAEnC,IAAI,QAAQ,GAAGA,OAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,UAAU,GAAG,YAAY,CAAC;AAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,MAAM,GAAG,QAAQ,CAAC;AACtB,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,OAAO,GAAGgB,YAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AAC1C,IAAI,OAAO,GAAGA,YAAW,GAAG,IAAI,GAAG,WAAW,CAAC;AAC/C,IAAI,OAAO,GAAGA,YAAW,GAAG,IAAI,GAAG,WAAW,CAAC;;;AAG/C,SAAS,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;EACxC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;EAC3B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;EACtB,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACrD,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC1D,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACZ,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;;EAEnB,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE;;IAExC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,GAAG,IAAI,CAAC;GACV,MAAM;IACL,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MAChC,CAAC,EAAE,CAAC;MACJ,CAAC,IAAI,CAAC,CAAC;KACR;IACD,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MAClB,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;KACjB,MAAM;MACL,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;KACjC;IACD,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;MAClB,CAAC,EAAE,CAAC;MACJ,CAAC,IAAI,CAAC,CAAC;KACR;IACD,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;MACrB,CAAC,GAAG,CAAC,CAAC;MACN,CAAC,GAAG,IAAI,CAAC;KACV,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MACzB,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;MACnC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACf,MAAM;MACL,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;MAC7C,CAAC,GAAG,CAAC,CAAC;KACP;GACF;EACD,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;EAC9D,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;EAClB,IAAI,IAAI,IAAI,CAAC;EACb,OAAO,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;EAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;EACvB,OAAO,MAAM,CAAC;CACf;AACD,SAAS,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;EAC3C,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;EAC3B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;EACtB,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;EACnB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EACpB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EAChB,IAAI,CAAC,CAAC;EACN,CAAC,KAAK,CAAC,CAAC;EACR,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;EAC5D,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;EAC1B,CAAC,KAAK,CAAC,KAAK,CAAC;EACb,KAAK,IAAI,IAAI,CAAC;EACd,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;EAC5D,IAAI,CAAC,KAAK,CAAC,EAAE;IACX,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;GACf,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;IACrB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;GAC3C,MAAM;IACL,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;GACf,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9C;;AAED,SAAS,SAAS,CAAC,KAAK,EAAE;EACxB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;CACnE;AACD,SAAS,MAAM,CAAC,EAAE,EAAE;EAClB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;CACpB;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;CACpC;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;CACtE;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;;AAED,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;EACnC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACxE;;AAED,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;EAC/C,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;EACtB,IAAI,QAAQ,GAAGC,QAAO,CAAC,QAAQ,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;EACpE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;EAC7B,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;EAC7C,OAAO,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;CAC/C;AACD,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE;EAClE,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;EACtB,IAAI,QAAQ,GAAGA,QAAO,CAAC,QAAQ,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;EACpE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;EAC7B,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7F;;AAED,IAAI,CAACC,MAAM,CAAC,GAAG,EAAE;EACf,YAAY,GAAG,SAAS,WAAW,CAAC,MAAM,EAAE;IAC1CC,WAAU,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAGF,QAAO,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,GAAGG,UAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;GAC5B,CAAC;;EAEF,SAAS,GAAG,SAAS,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;IAC5DD,WAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACvCA,WAAU,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,MAAM,GAAGb,UAAS,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,YAAY,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;IAC3E,UAAU,GAAG,UAAU,KAAK,SAAS,GAAG,YAAY,GAAG,MAAM,GAAGC,SAAQ,CAAC,UAAU,CAAC,CAAC;IACrF,IAAI,MAAM,GAAG,UAAU,GAAG,YAAY,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;GAC5B,CAAC;;EAEF,IAAIS,YAAW,EAAE;IACf,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;GACzC;;EAEDK,YAAW,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;IAChC,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE;MACpC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;KAChD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE;MACtC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,uBAAuB;MAC3D,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;KAC/C;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,uBAAuB;MAC7D,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KACjC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,uBAAuB;MAC3D,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,uBAAuB;MAC7D,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KAChE;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,uBAAuB;MAC/D,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KACrE;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,uBAAuB;MAC/D,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KACrE;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE;MAC3C,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;MAC7C,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,uBAAuB;MAClE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACpE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,uBAAuB;MAClE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACpE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACtE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACtE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;GACF,CAAC,CAAC;CACJ,MAAM;EACL,IAAI,CAACC,MAAK,CAAC,YAAY;IACrB,YAAY,CAAC,CAAC,CAAC,CAAC;GACjB,CAAC,IAAI,CAACA,MAAK,CAAC,YAAY;IACvB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;GACtB,CAAC,IAAIA,MAAK,CAAC,YAAY;IACtB,IAAI,YAAY,EAAE,CAAC;IACnB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC;GAC1C,CAAC,EAAE;IACF,YAAY,GAAG,SAAS,WAAW,CAAC,MAAM,EAAE;MAC1CH,WAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;MAC/B,OAAO,IAAI,UAAU,CAACF,QAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KACxC,CAAC;IACF,IAAI,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACvE,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG;MAC9D,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,EAAElB,KAAI,CAAC,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;KACpF;IACD,IAAI,CAACwB,QAAO,EAAE,gBAAgB,CAAC,WAAW,GAAG,YAAY,CAAC;GAC3D;;EAED,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;EAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;EAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;EAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAEF,YAAW,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;IACzE,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE;MAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACpD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;MAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACpD;GACF,EAAE,IAAI,CAAC,CAAC;CACV;AACDG,eAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC3CA,eAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACrCzB,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAEmB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9C,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AACrC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;;;ACnR/B;;;AAGA,IAAI,OAAO,GAAG7B,IAAiB,CAAC,SAAS,CAAC,CAAC;AAC3C,uBAAc,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;EAC/B,IAAI,CAAC,GAAGI,SAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;EAChC,IAAI,CAAC,CAAC;EACN,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAGA,SAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,GAAGQ,UAAS,CAAC,CAAC,CAAC,CAAC;CACtF,CAAC;;ACJF,IAAIwB,SAAO,GAAGpC,IAAiB,CAAC,SAAS,CAAC,CAAC;;AAE3C,eAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,IAAI,CAAC,GAAGW,OAAM,CAAC,GAAG,CAAC,CAAC;EACpB,IAAIgB,YAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAACS,SAAO,CAAC,EAAE7B,SAAE,CAAC,CAAC,CAAC,CAAC,EAAE6B,SAAO,EAAE;IACpD,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE;GAClC,CAAC,CAAC;CACJ,CAAC;;ACJF,IAAI,WAAW,GAAGpC,OAAoB,CAAC,WAAW,CAAC;;AAEnD,IAAI,YAAY,GAAGqC,YAAM,CAAC,WAAW,CAAC;AACtC,IAAI,SAAS,GAAGA,YAAM,CAAC,QAAQ,CAAC;AAChC,IAAI,OAAO,GAAGR,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;AAC/C,IAAI,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;AAC1C,IAAIS,MAAI,GAAGT,MAAM,CAAC,IAAI,CAAC;AACvB,IAAI,YAAY,GAAG,aAAa,CAAC;;AAEjCU,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,WAAW,KAAK,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;;AAE3GA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACV,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE;;EAE5D,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,EAAE;IAC1B,OAAO,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI9B,SAAQ,CAAC,EAAE,CAAC,IAAIuC,MAAI,IAAI,EAAE,CAAC;GAC7D;CACF,CAAC,CAAC;;AAEHC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGrC,MAAmB,CAAC,YAAY;EAC1E,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC;CAC5D,CAAC,EAAE,YAAY,EAAE;;EAEhB,KAAK,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;IAChC,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,MAAM,CAAC,IAAI,CAACE,SAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACzF,IAAI,GAAG,GAAGA,SAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;IACpC,IAAI,KAAK,GAAGoB,gBAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,GAAGA,gBAAe,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,MAAM,GAAG,KAAKgB,mBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,EAAEtB,SAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,EAAE;MACpB,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC,OAAO,MAAM,CAAC;GACjB;CACF,CAAC,CAAC;;AAEHf,WAAyB,CAAC,YAAY,CAAC,CAAC;;AC7CxC;;AAEA,IAAIsC,KAAG,GAAGzC,IAAiB,CAAC,aAAa,CAAC,CAAC;;AAE3C,IAAI,GAAG,GAAGmB,IAAG,CAAC,YAAY,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC;;;AAGlE,IAAI,MAAM,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE;EAC9B,IAAI;IACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;GAChB,CAAC,OAAO,CAAC,EAAE,eAAe;CAC5B,CAAC;;AAEF,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACZ,OAAO,EAAE,KAAK,SAAS,GAAG,WAAW,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM;;MAExD,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAEsB,KAAG,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC;;MAExD,GAAG,GAAGtB,IAAG,CAAC,CAAC,CAAC;;MAEZ,CAAC,CAAC,GAAGA,IAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;CACjF,CAAC;;ACtBF,cAAc,GAAG,EAAE,CAAC;;ACApB;;AAEA,IAAI,QAAQ,GAAGnB,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;;AAEjC,gBAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,KAAK,SAAS,KAAK0C,UAAS,CAAC,KAAK,KAAK,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACpF,CAAC;;ACPF;;;;AAIA,eAAc,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE;EAC/C,OAAOjB,mBAAK,CAAC,CAAC,EAAEkB,YAAW,CAAC,CAAC;CAC9B,CAAC;;ACFF,cAAc,GAAG3C,YAAyB,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE;EAC9GI,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAI,IAAI,GAAGwC,WAAO,CAAC,UAAU,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;EACzB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,CAAC;EACN,OAAO,MAAM,GAAG,CAAC,EAAErC,SAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;EACzD,OAAO,CAAC,CAAC;CACV,CAAC;;ACZF,IAAIN,UAAQ,GAAGD,OAAoB,CAAC,QAAQ,CAAC;AAC7C,SAAc,GAAGC,UAAQ,IAAIA,UAAQ,CAAC,eAAe,CAAC;;ACDtD;;;;AAIA,IAAI4C,UAAQ,GAAG7C,UAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,KAAK,GAAG,YAAY,eAAe,CAAC;AACxC,IAAI8C,WAAS,GAAG,WAAW,CAAC;;;AAG5B,IAAI,UAAU,GAAG,YAAY;;EAE3B,IAAI,MAAM,GAAG5C,UAAwB,CAAC,QAAQ,CAAC,CAAC;EAChD,IAAI,CAAC,GAAGyC,YAAW,CAAC,MAAM,CAAC;EAC3B,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI,cAAc,CAAC;EACnB,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EAC9BxC,KAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EACvC,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC;;;EAG3B,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;EAC/C,cAAc,CAAC,IAAI,EAAE,CAAC;EACtB,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,mBAAmB,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC;EACrF,cAAc,CAAC,KAAK,EAAE,CAAC;EACvB,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC;EAC9B,OAAO,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC2C,WAAS,CAAC,CAACH,YAAW,CAAC,CAAC,CAAC,CAAC,CAAC;EACzD,OAAO,UAAU,EAAE,CAAC;CACrB,CAAC;;AAEF,iBAAc,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE;EAC/D,IAAI,MAAM,CAAC;EACX,IAAI,CAAC,KAAK,IAAI,EAAE;IACd,KAAK,CAACG,WAAS,CAAC,GAAG1C,SAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;IACrB,KAAK,CAAC0C,WAAS,CAAC,GAAG,IAAI,CAAC;;IAExB,MAAM,CAACD,UAAQ,CAAC,GAAG,CAAC,CAAC;GACtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;EAC7B,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,GAAGE,UAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpE,CAAC;;ACxCF;;;AAGA,IAAIF,UAAQ,GAAG7C,UAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;;AAEnC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,EAAE;EACrD,CAAC,GAAG0B,SAAQ,CAAC,CAAC,CAAC,CAAC;EAChB,IAAIjB,IAAG,CAAC,CAAC,EAAEoC,UAAQ,CAAC,EAAE,OAAO,CAAC,CAACA,UAAQ,CAAC,CAAC;EACzC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;IACpE,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;GAChC,CAAC,OAAO,CAAC,YAAY,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;CACnD,CAAC;;ACXF,IAAIG,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;;AAE7C,0BAAc,GAAGE,KAAkB,CAAC,iBAAiB,GAAG,UAAU,EAAE,EAAE;EACpE,IAAI,EAAE,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC8C,UAAQ,CAAC;OACnC,EAAE,CAAC,YAAY,CAAC;OAChBN,UAAS,CAACO,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7B,CAAC;;ACPF;;AAEA,YAAc,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC,GAAG,EAAE;EACtD,OAAO9B,IAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;CAC5B,CAAC;;ACFF,IAAIiB,SAAO,GAAGpC,IAAiB,CAAC,SAAS,CAAC,CAAC;;AAE3C,4BAAc,GAAG,UAAU,QAAQ,EAAE;EACnC,IAAI,CAAC,CAAC;EACN,IAAIkD,QAAO,CAAC,QAAQ,CAAC,EAAE;IACrB,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;;IAEzB,IAAI,OAAO,CAAC,IAAI,UAAU,KAAK,CAAC,KAAK,KAAK,IAAIA,QAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IACnF,IAAInD,SAAQ,CAAC,CAAC,CAAC,EAAE;MACf,CAAC,GAAG,CAAC,CAACqC,SAAO,CAAC,CAAC;MACf,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;KAC/B;GACF,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;CACtC,CAAC;;ACfF;;;AAGA,uBAAc,GAAG,UAAU,QAAQ,EAAE,MAAM,EAAE;EAC3C,OAAO,KAAKI,wBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;CACnD,CAAC;;ACLF;;;;;;;;;;;;AAYA,iBAAc,GAAG,UAAU,IAAI,EAAE,OAAO,EAAE;EACxC,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC;EACvB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC;EAC1B,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;EACxB,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;EACzB,IAAI,aAAa,GAAG,IAAI,IAAI,CAAC,CAAC;EAC9B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,aAAa,CAAC;EAC1C,IAAI,MAAM,GAAG,OAAO,IAAIW,mBAAG,CAAC;EAC5B,OAAO,UAAU,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI,CAAC,GAAGzB,SAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,IAAI,GAAGN,QAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAGN,IAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,MAAM,GAAGI,SAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IACvF,IAAI,GAAG,EAAE,GAAG,CAAC;IACb,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;MAC5D,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;MAClB,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;MACvB,IAAI,IAAI,EAAE;QACR,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAC3B,IAAI,GAAG,EAAE,QAAQ,IAAI;UACxB,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;UACpB,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC;UACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;UACrB,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1B,MAAM,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC;OACnC;KACF;IACD,OAAO,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;GACrE,CAAC;CACH,CAAC;;AC3CF;AACA,IAAI,WAAW,GAAGlB,IAAiB,CAAC,aAAa,CAAC,CAAC;AACnD,IAAIoD,YAAU,GAAG,KAAK,CAAC,SAAS,CAAC;AACjC,IAAIA,YAAU,CAAC,WAAW,CAAC,IAAI,SAAS,EAAElD,KAAkB,CAACkD,YAAU,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1F,qBAAc,GAAG,UAAU,GAAG,EAAE;EAC9BA,YAAU,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACrC,CAAC;;ACNF,aAAc,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;CACvC,CAAC;;ACEF,IAAI,iBAAiB,GAAG,EAAE,CAAC;;;AAG3BpD,KAAkB,CAAC,iBAAiB,EAAEE,IAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;;AAEnG,eAAc,GAAG,UAAU,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;EAClD,WAAW,CAAC,SAAS,GAAGmD,aAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAEC,aAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACjFnB,eAAc,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;CACjD,CAAC;;ACFF,IAAIa,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,IAAI,GAAG,MAAM,CAAC;AAClB,IAAI,MAAM,GAAG,QAAQ,CAAC;;AAEtB,IAAI,UAAU,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;;AAE9C,eAAc,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;EACjFuD,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACrC,IAAI,SAAS,GAAG,UAAU,IAAI,EAAE;IAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,IAAI;MACV,KAAK,IAAI,EAAE,OAAO,SAAS,IAAI,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;MAC1E,KAAK,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC,OAAO,SAAS,OAAO,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;GACrE,CAAC;EACF,IAAI,GAAG,GAAG,IAAI,GAAG,WAAW,CAAC;EAC7B,IAAI,UAAU,GAAG,OAAO,IAAI,MAAM,CAAC;EACnC,IAAI,UAAU,GAAG,KAAK,CAAC;EACvB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;EAC3B,IAAI,OAAO,GAAG,KAAK,CAACP,UAAQ,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;EACjF,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;EACzD,IAAI,QAAQ,GAAG,OAAO,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;EACnF,IAAI,UAAU,GAAG,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC;EACtE,IAAI,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC;;EAEpC,IAAI,UAAU,EAAE;IACd,iBAAiB,GAAGQ,UAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,iBAAiB,KAAK,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,EAAE;;MAEpErB,eAAc,CAAC,iBAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;MAE7C,IAAI,CAACD,QAAO,IAAI,CAACzB,IAAG,CAAC,iBAAiB,EAAEuC,UAAQ,CAAC,EAAEtC,KAAI,CAAC,iBAAiB,EAAEsC,UAAQ,EAAE,UAAU,CAAC,CAAC;KAClG;GACF;;EAED,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IACpD,UAAU,GAAG,IAAI,CAAC;IAClB,QAAQ,GAAG,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;GAC7D;;EAED,IAAI,CAAC,CAACd,QAAO,IAAI,MAAM,MAAM,KAAK,IAAI,UAAU,IAAI,CAAC,KAAK,CAACc,UAAQ,CAAC,CAAC,EAAE;IACrEtC,KAAI,CAAC,KAAK,EAAEsC,UAAQ,EAAE,QAAQ,CAAC,CAAC;GACjC;;EAEDN,UAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;EAC3BA,UAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;EAC5B,IAAI,OAAO,EAAE;IACX,OAAO,GAAG;MACR,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;MACjD,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;MACzC,OAAO,EAAE,QAAQ;KAClB,CAAC;IACF,IAAI,MAAM,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE;MAC/B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE3B,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD,MAAMwB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;GAC9E;EACD,OAAO,OAAO,CAAC;CAChB,CAAC;;;;;;AC3DF,sBAAc,GAAGvC,WAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE,IAAI,EAAE;EACnF,IAAI,CAAC,EAAE,GAAGuB,UAAS,CAAC,QAAQ,CAAC,CAAC;EAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;;CAEhB,EAAE,YAAY;EACb,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;EAChB,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACnB,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;EACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE;IAC3B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,OAAOkC,SAAI,CAAC,CAAC,CAAC,CAAC;GAChB;EACD,IAAI,IAAI,IAAI,MAAM,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EAC1C,IAAI,IAAI,IAAI,QAAQ,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACnC,EAAE,QAAQ,CAAC,CAAC;;;AAGbf,UAAS,CAAC,SAAS,GAAGA,UAAS,CAAC,KAAK,CAAC;;AAEtCgB,iBAAgB,CAAC,MAAM,CAAC,CAAC;AACzBA,iBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC3BA,iBAAgB,CAAC,SAAS,CAAC,CAAC;;ACjC5B,IAAIV,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,YAAY,GAAG,KAAK,CAAC;;AAEzB,IAAI;EACF,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAACgD,UAAQ,CAAC,EAAE,CAAC;EAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;CAGxD,CAAC,OAAO,CAAC,EAAE,eAAe;;AAE3B,eAAc,GAAG,UAAU,IAAI,EAAE,WAAW,EAAE;EAC5C,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,OAAO,KAAK,CAAC;EAChD,IAAI,IAAI,GAAG,KAAK,CAAC;EACjB,IAAI;IACF,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,GAAG,CAACA,UAAQ,CAAC,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1D,GAAG,CAACA,UAAQ,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;GACX,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,OAAO,IAAI,CAAC;CACb,CAAC;;ACfF,oBAAc,GAAG,EAAE,CAAC,UAAU,IAAI,SAAS,UAAU,CAAC,MAAM,YAAY,KAAK,2BAA2B;EACtG,IAAI,CAAC,GAAGtB,SAAQ,CAAC,IAAI,CAAC,CAAC;EACvB,IAAI,GAAG,GAAGR,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAC7B,IAAI,EAAE,GAAGM,gBAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACtC,IAAI,IAAI,GAAGA,gBAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACvC,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;EAC1D,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAGA,gBAAe,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;EAC7F,IAAI,GAAG,GAAG,CAAC,CAAC;EACZ,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,KAAK,EAAE;IAClC,GAAG,GAAG,CAAC,CAAC,CAAC;IACT,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAClB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;GACjB;EACD,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;IAClB,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,EAAE,IAAI,GAAG,CAAC;IACV,IAAI,IAAI,GAAG,CAAC;GACb,CAAC,OAAO,CAAC,CAAC;CACZ,CAAC;;ACzBF,OAAS,GAAG,EAAE,CAAC,oBAAoB,CAAC;;;;;;ACMpC,IAAI,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAE3C,OAAS,GAAGxB,YAAyB,GAAG,IAAI,GAAG,SAAS,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE;EACrF,CAAC,GAAGuB,UAAS,CAAC,CAAC,CAAC,CAAC;EACjB,CAAC,GAAGlB,YAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EACzB,IAAIC,aAAc,EAAE,IAAI;IACtB,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GACnB,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,IAAIG,IAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAOD,aAAU,CAAC,CAACmD,UAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC;;;;;;;ACfF,AACA,IAAI3D,YAAyB,EAAE;EAC7B,IAAI,OAAO,GAAGE,QAAqB,CAAC;EACpC,IAAI,MAAM,GAAGC,OAAoB,CAAC;EAClC,IAAI,KAAK,GAAGyD,MAAmB,CAAC;EAChC,IAAI,OAAO,GAAGC,OAAoB,CAAC;EACnC,IAAI,MAAM,GAAGC,MAAmB,CAAC;EACjC,IAAI,OAAO,GAAGC,YAA0B,CAAC;EACzC,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,UAAU,GAAGC,WAAyB,CAAC;EAC3C,IAAI,YAAY,GAAGC,aAA2B,CAAC;EAC/C,IAAI,IAAI,GAAGC,KAAkB,CAAC;EAC9B,IAAI,WAAW,GAAGC,YAA0B,CAAC;EAC7C,IAAI,SAAS,GAAGC,UAAwB,CAAC;EACzC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,OAAO,GAAGC,QAAsB,CAAC;EACrC,IAAI,eAAe,GAAGC,gBAA+B,CAAC;EACtD,IAAI,WAAW,GAAGC,YAA0B,CAAC;EAC7C,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,OAAO,GAAGC,QAAqB,CAAC;EACpC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,WAAW,GAAGC,YAA2B,CAAC;EAC9C,IAAI,MAAM,GAAGC,aAA2B,CAAC;EACzC,IAAI,cAAc,GAAGC,UAAwB,CAAC;EAC9C,IAAI,IAAI,GAAGC,WAAyB,CAAC,CAAC,CAAC;EACvC,IAAI,SAAS,GAAGC,sBAAqC,CAAC;EACtD,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,iBAAiB,GAAGC,aAA2B,CAAC;EACpD,IAAI,mBAAmB,GAAGC,cAA4B,CAAC;EACvD,IAAI,kBAAkB,GAAGC,mBAAiC,CAAC;EAC3D,IAAI,cAAc,GAAGC,kBAA+B,CAAC;EACrD,IAAI,SAAS,GAAGC,UAAuB,CAAC;EACxC,IAAI,WAAW,GAAGC,WAAyB,CAAC;EAC5C,IAAI,UAAU,GAAGC,WAAyB,CAAC;EAC3C,IAAI,SAAS,GAAGC,UAAwB,CAAC;EACzC,IAAI,eAAe,GAAGC,gBAA+B,CAAC;EACtD,IAAI,GAAG,GAAGC,SAAuB,CAAC;EAClC,IAAI,KAAK,GAAGC,WAAyB,CAAC;EACtC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;EACf,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;EACnB,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;EACnC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;EACjC,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;EACnC,IAAI,YAAY,GAAG,aAAa,CAAC;EACjC,IAAI,aAAa,GAAG,QAAQ,GAAG,YAAY,CAAC;EAC5C,IAAI,iBAAiB,GAAG,mBAAmB,CAAC;EAC5C,IAAI,SAAS,GAAG,WAAW,CAAC;EAC5B,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;EAClC,IAAI,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;EACvC,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;EACjC,IAAI,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACxC,IAAI,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACvC,IAAI,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EAC1C,IAAI,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;EAC9C,IAAI,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;EAC9C,IAAI,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;EACxC,IAAI,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC;EACpC,IAAI,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC;EAC1C,IAAI,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;EAC9C,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;EACpC,IAAI,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;EAC9C,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,IAAI,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;EAClC,IAAI,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;EACxC,IAAI,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC;EACpD,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;EAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;EAC7B,IAAI,iBAAiB,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;EACjD,IAAI,eAAe,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;EAC7C,IAAI,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;EACrC,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;EACvB,IAAI,YAAY,GAAG,eAAe,CAAC;;EAEnC,IAAI,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;IACnD,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;GACpE,CAAC,CAAC;;EAEH,IAAI,aAAa,GAAG,KAAK,CAAC,YAAY;;IAEpC,OAAO,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GAC7D,CAAC,CAAC;;EAEH,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,YAAY;IAChF,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;GAC3B,CAAC,CAAC;;EAEH,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE;IAClC,IAAI,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;IAC3B,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;IACjD,MAAM,SAAS,CAAC,EAAE,GAAG,wBAAwB,CAAC,CAAC;GAChD,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE;IAClC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC,EAAE;MAC5C,MAAM,SAAS,CAAC,sCAAsC,CAAC,CAAC;KACzD,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;GACxB,CAAC;;EAEF,IAAI,eAAe,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE;IACvC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;GAClE,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,SAAS,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC3C,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;GACjE,CAAC;;EAEF,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,MAAM,yBAAyB;IACvD,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IAClC,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC9C,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;MAC/C,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QACvF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;OACzB,CAAC,CAAC,GAAG,MAAM,CAAC;KACd;IACD,IAAI,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MACzF,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;IACD,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,GAAG,GAAG,SAAS,EAAE,iBAAiB;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;GACf,CAAC;;;EAGF,IAAI,aAAa,GAAG,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;EAExG,IAAI,eAAe,GAAG,SAAS,cAAc,GAAG;IAC9C,OAAO,mBAAmB,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;GAC/G,CAAC;;EAEF,IAAI,KAAK,GAAG;IACV,UAAU,EAAE,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,cAAc;MACzD,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC7G;IACD,KAAK,EAAE,SAAS,KAAK,CAAC,UAAU,kBAAkB;MAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAChG;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,qBAAqB;MAC5C,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACnD;IACD,MAAM,EAAE,SAAS,MAAM,CAAC,UAAU,kBAAkB;MAClD,OAAO,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU;QACjE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KACrD;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,kBAAkB;MAC7C,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC9F;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,SAAS,kBAAkB;MACvD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACnG;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,kBAAkB;MACpD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC3F;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,aAAa,oBAAoB;MACzD,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACrG;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,aAAa,oBAAoB;MAC3D,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACtG;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,EAAE;MAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACnD;IACD,WAAW,EAAE,SAAS,WAAW,CAAC,aAAa,oBAAoB;MACjE,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAC1D;IACD,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,kBAAkB;MACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACrF;IACD,MAAM,EAAE,SAAS,MAAM,CAAC,UAAU,uBAAuB;MACvD,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACrD;IACD,WAAW,EAAE,SAAS,WAAW,CAAC,UAAU,uBAAuB;MACjE,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAC1D;IACD,OAAO,EAAE,SAAS,OAAO,GAAG;MAC1B,IAAI,IAAI,GAAG,IAAI,CAAC;MAChB,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;MACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;MACpC,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,IAAI,KAAK,CAAC;MACV,OAAO,KAAK,GAAG,MAAM,EAAE;QACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;OACtB,CAAC,OAAO,IAAI,CAAC;KACf;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,UAAU,kBAAkB;MAC9C,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC/F;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,EAAE;MAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAClD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;MACtC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;MACtB,IAAI,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;MAC5C,OAAO,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,iBAAiB;QAC3C,QAAQ,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;OAC/E,CAAC;KACH;GACF,CAAC;;EAEF,IAAI,MAAM,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;IACtC,OAAO,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;GAC3E,CAAC;;EAEF,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,iBAAiB;IAChD,QAAQ,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;GACzD,CAAC;;EAEF,IAAI,UAAU,GAAG;IACf,OAAO,EAAE,SAAS,OAAO,GAAG;MAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1C;IACD,IAAI,EAAE,SAAS,IAAI,GAAG;MACpB,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KACvC;IACD,MAAM,EAAE,SAAS,MAAM,GAAG;MACxB,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KACzC;GACF,CAAC;;EAEF,IAAI,SAAS,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE;IACrC,OAAO,QAAQ,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,WAAW,CAAC;SACnB,OAAO,GAAG,IAAI,QAAQ;SACtB,GAAG,IAAI,MAAM;SACb,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;GAClC,CAAC;EACF,IAAI,QAAQ,GAAG,SAAS,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE;IAC5D,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;GACvB,CAAC;EACF,IAAI,QAAQ,GAAG,SAAS,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IACxD,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC9C,QAAQ,CAAC,IAAI,CAAC;SACd,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;SAClB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;SACjB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;;SAEjB,CAAC,IAAI,CAAC,YAAY;UACjB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;UACxC,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;MAChD;MACA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;MACzB,OAAO,MAAM,CAAC;KACf,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;GAChC,CAAC;;EAEF,IAAI,CAAC,gBAAgB,EAAE;IACrB,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnB,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;GAClB;;EAED,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,QAAQ;IAClC,cAAc,EAAE,QAAQ;GACzB,CAAC,CAAC;;EAEH,IAAI,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAClD,aAAa,GAAG,mBAAmB,GAAG,SAAS,QAAQ,GAAG;MACxD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B,CAAC;GACH;;EAED,IAAI,qBAAqB,GAAG,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;EACnD,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;EAC/C,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;EACzD,WAAW,CAAC,qBAAqB,EAAE;IACjC,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,IAAI;IACT,WAAW,EAAE,YAAY,cAAc;IACvC,QAAQ,EAAE,aAAa;IACvB,cAAc,EAAE,eAAe;GAChC,CAAC,CAAC;EACH,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;EAChD,SAAS,CAAC,qBAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;EACpD,SAAS,CAAC,qBAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;EACpD,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;EAChD,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;GAC/C,CAAC,CAAC;;;EAGH,cAAc,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;IACvD,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACpB,IAAI,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,SAAS,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACtD,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;IACzB,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;IACzB,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAG,UAAU,IAAI,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAG,UAAU,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,mBAAmB,GAAG,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;MAClC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;KAC9D,CAAC;IACF,IAAI,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;MACzC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;MAC9F,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;KAC9D,CAAC;IACF,IAAI,UAAU,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;MACtC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;QACd,GAAG,EAAE,YAAY;UACf,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC5B;QACD,GAAG,EAAE,UAAU,KAAK,EAAE;UACpB,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACnC;QACD,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC;IACF,IAAI,MAAM,EAAE;MACV,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;UACnB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;UACvB,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;UAC5B,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;SACvC,MAAM,IAAI,IAAI,YAAY,YAAY,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,KAAK,IAAI,aAAa,EAAE;UAC5G,MAAM,GAAG,IAAI,CAAC;UACd,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;UAClC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;UAC3B,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,IAAI,GAAG,KAAK,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;YACjD,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;YAC3B,IAAI,UAAU,GAAG,CAAC,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;WACpD,MAAM;YACL,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACvC,IAAI,UAAU,GAAG,MAAM,GAAG,IAAI,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;WAChE;UACD,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;SAC7B,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE;UAC9B,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACnC,MAAM;UACL,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACrC;QACD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;UACf,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,UAAU;UACb,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC;SACzB,CAAC,CAAC;QACH,OAAO,KAAK,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;OAClD,CAAC,CAAC;MACH,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;MAC5E,IAAI,CAAC,mBAAmB,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;KACtD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;MAC5B,UAAU,CAAC,CAAC,CAAC,CAAC;KACf,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;MACvB,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE;MACjC,IAAI,UAAU,EAAE,CAAC;MACjB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;MACrB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;MACpB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;KACtB,EAAE,IAAI,CAAC,EAAE;MACR,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC;;;QAGV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI,YAAY,YAAY,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,KAAK,IAAI,aAAa,EAAE;UACrG,OAAO,OAAO,KAAK,SAAS;cACxB,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC;cACjD,OAAO,KAAK,SAAS;gBACnB,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,IAAI,WAAW,IAAI,IAAI,EAAE,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;OACrC,CAAC,CAAC;MACH,YAAY,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,EAAE;QAClG,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;OAC5D,CAAC,CAAC;MACH,UAAU,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC;MAC5C,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,WAAW,GAAG,UAAU,CAAC;KAC5D;IACD,IAAI,eAAe,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,iBAAiB,GAAG,CAAC,CAAC,eAAe;UACnC,eAAe,CAAC,IAAI,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IAC7E,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,mBAAmB,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;;IAEvD,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,mBAAmB,CAAC,EAAE;MAC5E,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE;OAClC,CAAC,CAAC;KACJ;;IAED,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;;IAErB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;IAErE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE;MACvB,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;;IAEH,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;MACzF,IAAI,EAAE,KAAK;MACX,EAAE,EAAE,GAAG;KACR,CAAC,CAAC;;IAEH,IAAI,EAAE,iBAAiB,IAAI,mBAAmB,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;;IAErG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;;IAEhC,UAAU,CAAC,IAAI,CAAC,CAAC;;IAEjB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEjE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;;IAEtE,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,IAAI,aAAa,EAAE,mBAAmB,CAAC,QAAQ,GAAG,aAAa,CAAC;;IAE5G,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY;MAChD,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;KAC3B,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;;IAE7B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY;MACjD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;KAC3E,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;MACvB,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC;;IAEhD,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,eAAe,GAAG,SAAS,CAAC;IAClE,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;GACpF,CAAC;CACH,MAAM,cAAc,GAAG,YAAY,eAAe,CAAC;;;AC/dpD/F,WAAyB,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACnD,OAAO,SAAS,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IAClD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,EAAE,IAAI,CAAC,CAAC;;ACJTA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACrD,OAAO,SAAS,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACrD,OAAO,SAAS,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACtD,OAAO,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACtD,OAAO,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJH;;AAEA,aAAc,GAAG,UAAU,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;EACvD,IAAI;IACF,OAAO,OAAO,GAAG,EAAE,CAACI,SAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;;GAE/D,CAAC,OAAO,CAAC,EAAE;IACV,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS,EAAEA,SAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,CAAC;GACT;CACF,CAAC;;;ACLF,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,OAAO,GAAG,cAAc,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;EAC9E,IAAI,MAAM,GAAG,QAAQ,GAAG,YAAY,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG4F,sBAAS,CAAC,QAAQ,CAAC,CAAC;EAC/E,IAAI,CAAC,GAAGlF,IAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EACvC,IAAI,KAAK,GAAG,CAAC,CAAC;EACd,IAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;EACnC,IAAI,OAAO,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAC;;EAEjF,IAAImF,YAAW,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,GAAG/E,SAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;IACzF,MAAM,GAAG,OAAO,GAAG,CAAC,CAACd,SAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC;GAC1D,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG;IAC7E,MAAM,GAAG8F,SAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC;GAC1D;CACF,CAAC;AACF,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;;;;ACxBxB,IAAI,IAAI,GAAGlG,IAAiB,CAAC,MAAM,CAAC,CAAC;;;AAGrC,IAAI,OAAO,GAAGE,SAAuB,CAAC,CAAC,CAAC;AACxC,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,YAAY;EACpD,OAAO,IAAI,CAAC;CACb,CAAC;AACF,IAAI,MAAM,GAAG,CAACC,MAAmB,CAAC,YAAY;EAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CACnD,CAAC,CAAC;AACH,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE;EAC1B,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE;IACzB,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE;IACb,CAAC,EAAE,EAAE;GACN,EAAE,CAAC,CAAC;CACN,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE,MAAM,EAAE;;EAElC,IAAI,CAACJ,SAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;EAChG,IAAI,CAACU,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;;IAElB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC;;IAElC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC;;IAExB,OAAO,CAAC,EAAE,CAAC,CAAC;;GAEb,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE,MAAM,EAAE;EAClC,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;;IAElB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC;;IAEnC,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC;;IAE1B,OAAO,CAAC,EAAE,CAAC,CAAC;;GAEb,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;;AAEF,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;EAC3B,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;EAC3E,OAAO,EAAE,CAAC;CACX,CAAC;AACF,IAAI,IAAI,GAAG,cAAc,GAAG;EAC1B,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,KAAK;EACX,OAAO,EAAE,OAAO;EAChB,OAAO,EAAE,OAAO;EAChB,QAAQ,EAAE,QAAQ;CACnB,CAAC;;;;;;;;ACnDF,uBAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE;EACnC,IAAI,CAACV,SAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,yBAAyB,GAAG,IAAI,GAAG,YAAY,CAAC,CAAC;EACtG,OAAO,EAAE,CAAC;CACX,CAAC;;ACHF,IAAIQ,IAAE,GAAGP,SAAuB,CAAC,CAAC,CAAC;;;;;;;;;;AAUnC,IAAI,OAAO,GAAGE,KAAkB,CAAC,OAAO,CAAC;;AAEzC,IAAI,IAAI,GAAGyB,YAAW,GAAG,IAAI,GAAG,MAAM,CAAC;;AAEvC,IAAI,QAAQ,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE;;EAElC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,KAAK,CAAC;EACV,IAAI,KAAK,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;EAEzC,KAAK,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE;IAC5C,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;GAClC;CACF,CAAC;;AAEF,qBAAc,GAAG;EACf,cAAc,EAAE,UAAU,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACtD,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,QAAQ,EAAE;MACxCG,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAGuB,aAAM,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;MACf,IAAI,QAAQ,IAAI,SAAS,EAAE8C,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;KACvE,CAAC,CAAC;IACHnE,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE;;;MAGvB,KAAK,EAAE,SAAS,KAAK,GAAG;QACtB,KAAK,IAAI,IAAI,GAAGoE,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE;UAC7F,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;UACf,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;UAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;OAChB;;;MAGD,QAAQ,EAAE,UAAU,GAAG,EAAE;QACvB,IAAI,IAAI,GAAGA,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,EAAE;UACT,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;UACnB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;UACnB,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;UACxB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;UACf,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;UACxB,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;UACxB,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;UACrC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;UACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACd,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;OAClB;;;MAGD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,2BAA2B;QAC7DA,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,GAAGtF,IAAG,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC;QACV,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;UACxC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;UAE1B,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;SAC1C;OACF;;;MAGD,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;QACrB,OAAO,CAAC,CAAC,QAAQ,CAACsF,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;OAC9C;KACF,CAAC,CAAC;IACH,IAAIzE,YAAW,EAAEpB,IAAE,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE;MACvC,GAAG,EAAE,YAAY;QACf,OAAO6F,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;OACnC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;GACV;EACD,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE;IAC/B,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,EAAE,KAAK,CAAC;;IAEhB,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;;KAEjB,MAAM;MACL,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;QAChB,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;QAC7B,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE;QACjB,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,KAAK;OACT,CAAC;MACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;MAC9B,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;MACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;;MAEb,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;KAC3C,CAAC,OAAO,IAAI,CAAC;GACf;EACD,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;;;IAGpCC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,QAAQ,EAAE,IAAI,EAAE;MAC7C,IAAI,CAAC,EAAE,GAAGD,mBAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;MACnC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;KACrB,EAAE,YAAY;MACb,IAAI,IAAI,GAAG,IAAI,CAAC;MAChB,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;;MAEpB,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;;MAEzC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;QAEjE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACpB,OAAO3C,SAAI,CAAC,CAAC,CAAC,CAAC;OAChB;;MAED,IAAI,IAAI,IAAI,MAAM,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;MAC5C,IAAI,IAAI,IAAI,QAAQ,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;MAC9C,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;IAGjD6C,WAAU,CAAC,IAAI,CAAC,CAAC;GAClB;CACF,CAAC;;AC/IF;;;;AAIA,IAAI,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE;EAC9BlG,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAI,CAACL,SAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,KAAK,GAAG,2BAA2B,CAAC,CAAC;CAC9F,CAAC;AACF,aAAc,GAAG;EACf,GAAG,EAAE,MAAM,CAAC,cAAc,KAAK,WAAW,IAAI,EAAE;IAC9C,UAAU,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;MAC1B,IAAI;QACF,GAAG,GAAGC,IAAiB,CAAC,QAAQ,CAAC,IAAI,EAAEE,WAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1G,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,KAAK,GAAG,EAAE,IAAI,YAAY,KAAK,CAAC,CAAC;OAClC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE;MAC7B,OAAO,SAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE;QACvC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChB,IAAI,KAAK,EAAE,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;OACV,CAAC;KACH,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;EAC3B,KAAK,EAAE,KAAK;CACb,CAAC;;ACvBF,IAAI,cAAc,GAAGF,SAAuB,CAAC,GAAG,CAAC;AACjD,sBAAc,GAAG,UAAU,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;EAC1C,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;EAC3B,IAAI,CAAC,CAAC;EACN,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,SAAS,IAAID,SAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE;IAC3G,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;GACzB,CAAC,OAAO,IAAI,CAAC;CACf,CAAC;;ACMF,eAAc,GAAG,UAAU,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;EAC1E,IAAI,IAAI,GAAGY,OAAM,CAAC,IAAI,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,IAAI,CAAC;EACb,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;EACnC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;EAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;EACX,IAAI,SAAS,GAAG,UAAU,GAAG,EAAE;IAC7B,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACpBI,SAAQ,CAAC,KAAK,EAAE,GAAG;MACjB,GAAG,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE;QAC7B,OAAO,OAAO,IAAI,CAAChB,SAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OACzE,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE;QACjC,OAAO,OAAO,IAAI,CAACA,SAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OACzE,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE;QACjC,OAAO,OAAO,IAAI,CAACA,SAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OAC7E,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;UAC/E,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;KAC3E,CAAC;GACH,CAAC;EACF,IAAI,OAAO,CAAC,IAAI,UAAU,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAACkC,MAAK,CAAC,YAAY;IAC7E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;GAC1B,CAAC,CAAC,EAAE;;IAEH,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxDD,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClCuE,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;GAClB,MAAM;IACL,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;;IAEvB,IAAI,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;;IAEvE,IAAI,oBAAoB,GAAGtE,MAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;IAEnE,IAAI,gBAAgB,GAAGuE,WAAW,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;IAErE,IAAI,UAAU,GAAG,CAAC,OAAO,IAAIvE,MAAK,CAAC,YAAY;;MAE7C,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;MACxB,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,OAAO,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;MAC/C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,EAAE;MACrB,CAAC,GAAG,OAAO,CAAC,UAAU,MAAM,EAAE,QAAQ,EAAE;QACtCH,WAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,GAAG2E,kBAAiB,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,SAAS,EAAEN,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;OACb,CAAC,CAAC;MACH,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;MACpB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;KACvB;IACD,IAAI,oBAAoB,IAAI,UAAU,EAAE;MACtC,SAAS,CAAC,QAAQ,CAAC,CAAC;MACpB,SAAS,CAAC,KAAK,CAAC,CAAC;MACjB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;KAC5B;IACD,IAAI,UAAU,IAAI,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;;IAEnD,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC;GAChD;;EAEDhE,eAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;EAExB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACZI,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;EAE5D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;;EAEhD,OAAO,CAAC,CAAC;CACV,CAAC;;ACjFF,IAAI,GAAG,GAAG,KAAK,CAAC;;;AAGhB,WAAc,GAAGvC,WAAwB,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE;EAC5D,OAAO,SAAS,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAC9F,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;IACrB,IAAI,KAAK,GAAG0G,iBAAM,CAAC,QAAQ,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;GACzB;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE;IAC5B,OAAOM,iBAAM,CAAC,GAAG,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;GACpE;CACF,EAAEM,iBAAM,EAAE,IAAI,CAAC,CAAC;;ACfjB,IAAI,GAAG,GAAG,KAAK,CAAC;;;AAGhB,WAAc,GAAG1G,WAAwB,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE;EAC5D,OAAO,SAAS,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAC9F,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE;IACvB,OAAO0G,iBAAM,CAAC,GAAG,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;GAChF;CACF,EAAEM,iBAAM,CAAC,CAAC;;ACbX,OAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC;;;;;;;;;;;;ACOzC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;;;AAG5B,iBAAc,GAAG,CAAC,OAAO,IAAI1G,MAAmB,CAAC,YAAY;EAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;EACX,IAAI,CAAC,GAAG,EAAE,CAAC;;EAEX,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;EACjB,IAAI,CAAC,GAAG,sBAAsB,CAAC;EAC/B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACT,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EAChD,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;CAC5E,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;EACnC,IAAI,CAAC,GAAG0B,SAAQ,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;EAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;EACd,IAAI,UAAU,GAAGiF,WAAI,CAAC,CAAC,CAAC;EACxB,IAAI,MAAM,GAAGhD,UAAG,CAAC,CAAC,CAAC;EACnB,OAAO,IAAI,GAAG,KAAK,EAAE;IACnB,IAAI,CAAC,GAAGvC,QAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,UAAU,GAAGwB,WAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAGA,WAAO,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,CAAC;IACR,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;GACzE,CAAC,OAAO,CAAC,CAAC;CACZ,GAAG,OAAO,CAAC;;AC/BZ,IAAI,OAAO,GAAG5C,KAAkB,CAAC,OAAO,CAAC;;;;;;;;AAQzC,IAAI,SAAS,GAAG4G,aAAiB,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,cAAc,GAAGA,aAAiB,CAAC,CAAC,CAAC,CAAC;AAC1C,IAAIC,IAAE,GAAG,CAAC,CAAC;;;AAGX,IAAI,mBAAmB,GAAG,UAAU,IAAI,EAAE;EACxC,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC,CAAC;CACzD,CAAC;AACF,IAAI,mBAAmB,GAAG,YAAY;EACpC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;CACb,CAAC;AACF,IAAI,kBAAkB,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE;EAC7C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;GACtB,CAAC,CAAC;CACJ,CAAC;AACF,mBAAmB,CAAC,SAAS,GAAG;EAC9B,GAAG,EAAE,UAAU,GAAG,EAAE;IAClB,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;GAC5B;EACD,GAAG,EAAE,UAAU,GAAG,EAAE;IAClB,OAAO,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GACxC;EACD,GAAG,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE;IACzB,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACvB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;GAChC;EACD,QAAQ,EAAE,UAAU,GAAG,EAAE;IACvB,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;MAC/C,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;GACjB;CACF,CAAC;;AAEF,mBAAc,GAAG;EACf,cAAc,EAAE,UAAU,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACtD,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,QAAQ,EAAE;MACxC/E,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAG+E,IAAE,EAAE,CAAC;MACf,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,QAAQ,IAAI,SAAS,EAAEV,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;KACvE,CAAC,CAAC;IACHnE,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE;;;MAGvB,QAAQ,EAAE,UAAU,GAAG,EAAE;QACvB,IAAI,CAACjC,SAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,OAAO,IAAI,IAAIU,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC5D;;;MAGD,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,CAAC/G,SAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,IAAIU,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;OACpC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;GACV;EACD,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE;IAC/B,IAAI,IAAI,GAAG,OAAO,CAAC1G,SAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IAC3B,OAAO,IAAI,CAAC;GACb;EACD,OAAO,EAAE,mBAAmB;CAC7B,CAAC;;;ACpFF,AACA,IAAI,IAAI,GAAGJ,aAA2B,CAAC,CAAC,CAAC,CAAC;;;;;;;;AAQ1C,IAAI,QAAQ,GAAG,SAAS,CAAC;AACzB,IAAI,OAAO,GAAGuG,KAAI,CAAC,OAAO,CAAC;AAC3B,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC,IAAI,mBAAmB,GAAGQ,eAAI,CAAC,OAAO,CAAC;AACvC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,IAAI,WAAW,CAAC;;AAEhB,IAAI,OAAO,GAAG,UAAU,GAAG,EAAE;EAC3B,OAAO,SAAS,OAAO,GAAG;IACxB,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACnE,CAAC;CACH,CAAC;;AAEF,IAAI,OAAO,GAAG;;EAEZ,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;IACrB,IAAIhH,SAAQ,CAAC,GAAG,CAAC,EAAE;MACjB,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;MACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACjF,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;KACzC;GACF;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE;IAC5B,OAAOW,eAAI,CAAC,GAAG,CAACX,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;GACvD;CACF,CAAC;;;AAGF,IAAI,QAAQ,GAAG,cAAc,GAAGlG,WAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE6G,eAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;;AAGvG,IAAI9E,MAAK,CAAC,YAAY,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;EACtG,WAAW,GAAG8E,eAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;EACrDC,aAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;EACvCT,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACjB,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,EAAE;IACnD,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACxBxF,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;;MAEnC,IAAIhB,SAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;;OAErC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAClC,CAAC,CAAC;GACJ,CAAC,CAAC;CACJ;;;ACvDD,IAAI,QAAQ,GAAG,SAAS,CAAC;;;AAGzBC,WAAwB,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE;EAChD,OAAO,SAAS,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAClG,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE;IACvB,OAAO+G,eAAI,CAAC,GAAG,CAACX,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;GACxD;CACF,EAAEW,eAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;ACbtB;;;;AAIA,IAAI,MAAM,GAAG,CAAC/G,OAAoB,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;AACxD,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAE5BuC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACrC,MAAmB,CAAC,YAAY;EAC/D,MAAM,CAAC,YAAY,eAAe,CAAC,CAAC;CACrC,CAAC,EAAE,SAAS,EAAE;EACb,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE;IACzD,IAAI,CAAC,GAAGU,UAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAGR,SAAQ,CAAC,aAAa,CAAC,CAAC;IAChC,OAAO,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;GAC9E;CACF,CAAC,CAAC;;ACfH;AACA,WAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;EACzC,IAAI,EAAE,GAAG,IAAI,KAAK,SAAS,CAAC;EAC5B,QAAQ,IAAI,CAAC,MAAM;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;wBACJ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACX,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACpB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACvE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC/B,CAAC;;ACXF,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;AAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;;AAEnB,IAAI,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;EACtC,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,EAAE;IACvB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;;IAE5D,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;GACvE,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;CAClC,CAAC;;AAEF,SAAc,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,kBAAkB;EACpE,IAAI,EAAE,GAAGQ,UAAS,CAAC,IAAI,CAAC,CAAC;EACzB,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;EAC7C,IAAI,KAAK,GAAG,yBAAyB;IACnC,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,YAAY,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAGqG,OAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;GAC1F,CAAC;EACF,IAAIlH,SAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;EAC3D,OAAO,KAAK,CAAC;CACd,CAAC;;ACxBF;;;;;;;;AAQA,IAAI,UAAU,GAAG,CAACC,OAAoB,CAAC,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC;;;;AAIhE,IAAI,cAAc,GAAGiC,MAAK,CAAC,YAAY;EACrC,SAAS,CAAC,GAAG,eAAe;EAC5B,OAAO,EAAE,UAAU,CAAC,YAAY,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;CACvE,CAAC,CAAC;AACH,IAAI,QAAQ,GAAG,CAACA,MAAK,CAAC,YAAY;EAChC,UAAU,CAAC,YAAY,eAAe,CAAC,CAAC;CACzC,CAAC,CAAC;;AAEHM,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,cAAc,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE;EACvE,SAAS,EAAE,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,oBAAoB;IAC5D3B,UAAS,CAAC,MAAM,CAAC,CAAC;IAClBR,SAAQ,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAGQ,UAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5E,IAAI,MAAM,IAAI,SAAS,EAAE;;MAEvB,QAAQ,IAAI,CAAC,MAAM;QACjB,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;OAC/D;;MAED,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;MACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;MAC9B,OAAO,KAAKsG,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC;KAC1C;;IAED,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,IAAI,QAAQ,GAAG7D,aAAM,CAACtD,SAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,OAAOA,SAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;GAC7C;CACF,CAAC,CAAC;;AC9CH;;;;;;;AAOAwC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;;EAE9D,OAAO,CAAC,cAAc,CAACO,SAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;CACpE,CAAC,EAAE,SAAS,EAAE;EACb,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE;IACvEH,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,WAAW,GAAGC,YAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7CD,SAAQ,CAAC,UAAU,CAAC,CAAC;IACrB,IAAI;MACFG,SAAE,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;MACtC,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACtBH;;AAEA,IAAI4G,MAAI,GAAGnH,WAAyB,CAAC,CAAC,CAAC;;;AAGvCuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;IAC3D,IAAI,IAAI,GAAG4E,MAAI,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;GACxE;CACF,CAAC,CAAC;;ACVH;;;;;;;;AAQA,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,mBAAmB;EACjD,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC5D,IAAI,IAAI,EAAE,KAAK,CAAC;EAChB,IAAIA,SAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;EAC9D,IAAI,IAAI,GAAG+G,WAAI,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO1G,IAAG,CAAC,IAAI,EAAE,OAAO,CAAC;MAC7D,IAAI,CAAC,KAAK;MACV,IAAI,CAAC,GAAG,KAAK,SAAS;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvB,SAAS,CAAC;EAChB,IAAIV,SAAQ,CAAC,KAAK,GAAGyD,UAAc,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;CACxF;;AAEDjB,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;ACpB5C;;;;;AAKAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,wBAAwB,EAAE,SAAS,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE;IAC/E,OAAO4E,WAAI,CAAC,CAAC,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;ACTH;;;;;AAKAmC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE;IAC9C,OAAO6E,UAAQ,CAAChH,SAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;GACnC;CACF,CAAC,CAAC;;ACTH;;;AAGAmC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,GAAG,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE;IACrC,OAAO,WAAW,IAAI,MAAM,CAAC;GAC9B;CACF,CAAC,CAAC;;ACPH;;;AAGA,IAAI,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;;AAExCA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,YAAY,EAAE,SAAS,YAAY,CAAC,MAAM,EAAE;IAC1CnC,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,OAAO,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;GACrD;CACF,CAAC,CAAC;;ACVH;;;;AAIA,IAAIiH,SAAO,GAAGrH,OAAoB,CAAC,OAAO,CAAC;AAC3C,YAAc,GAAGqH,SAAO,IAAIA,SAAO,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC,EAAE,EAAE;EAClE,IAAI,IAAI,GAAGC,WAAI,CAAC,CAAC,CAAClH,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,UAAU,GAAGuG,WAAI,CAAC,CAAC,CAAC;EACxB,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC;;ACTF;;;AAGApE,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAEvC,QAAsB,EAAE,CAAC,CAAC;;ACHnE;;;AAGA,IAAI,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAElDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,iBAAiB,EAAE,SAAS,iBAAiB,CAAC,MAAM,EAAE;IACpDnC,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,IAAI;MACF,IAAI,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;MACnD,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACfH;;;;;;;;;;AAUA,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,mBAAmB;EACpD,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC5D,IAAI,OAAO,GAAG+G,WAAI,CAAC,CAAC,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;EACpD,IAAI,kBAAkB,EAAE,KAAK,CAAC;EAC9B,IAAI,CAAC,OAAO,EAAE;IACZ,IAAIL,SAAQ,CAAC,KAAK,GAAGyD,UAAc,CAAC,MAAM,CAAC,CAAC,EAAE;MAC5C,OAAO,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;KAC7C;IACD,OAAO,GAAGhD,aAAU,CAAC,CAAC,CAAC,CAAC;GACzB;EACD,IAAIC,IAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;IACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,CAACV,SAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;IACpE,kBAAkB,GAAGoH,WAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI3G,aAAU,CAAC,CAAC,CAAC,CAAC;IACpE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;IAC7BD,SAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC;GACb;EACD,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;CAClF;;AAEDgC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;AC9B5C;;;;AAIA,IAAIgF,SAAQ,EAAEhF,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC1C,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE;IACrDgF,SAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAI;MACFA,SAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;MAC5B,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACTH,IAAI,OAAO,GAAG5G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,OAAO,GAAGA,OAAM,CAAC,YAAY,CAAC;AAClC,IAAI,SAAS,GAAGA,OAAM,CAAC,cAAc,CAAC;AACtC,IAAI,cAAc,GAAGA,OAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,QAAQ,GAAGA,OAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAI,kBAAkB,GAAG,oBAAoB,CAAC;AAC9C,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACzB,IAAI,GAAG,GAAG,YAAY;EACpB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;;EAEf,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;IAC5B,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,CAAC;GACN;CACF,CAAC;AACF,IAAI,QAAQ,GAAG,UAAU,KAAK,EAAE;EAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CACtB,CAAC;;AAEF,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE;EAC1B,OAAO,GAAG,SAAS,YAAY,CAAC,EAAE,EAAE;IAClC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,YAAY;;MAE7BsG,OAAM,CAAC,OAAO,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;KAC3D,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;GAChB,CAAC;EACF,SAAS,GAAG,SAAS,cAAc,CAAC,EAAE,EAAE;IACtC,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;GAClB,CAAC;;EAEF,IAAIjH,IAAiB,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE;IAC3C,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,OAAO,CAAC,QAAQ,CAACc,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;;GAEH,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE;IACnC,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,QAAQ,CAAC,GAAG,CAACA,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KAC/B,CAAC;;GAEH,MAAM,IAAI,cAAc,EAAE;IACzB,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAC/B,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;IACnC,KAAK,GAAGA,IAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;;GAGxC,MAAM,IAAIH,OAAM,CAAC,gBAAgB,IAAI,OAAO,WAAW,IAAI,UAAU,IAAI,CAACA,OAAM,CAAC,aAAa,EAAE;IAC/F,KAAK,GAAG,UAAU,EAAE,EAAE;MACpBA,OAAM,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC;IACFA,OAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;;GAErD,MAAM,IAAI,kBAAkB,IAAI6G,UAAG,CAAC,QAAQ,CAAC,EAAE;IAC9C,KAAK,GAAG,UAAU,EAAE,EAAE;MACpBC,KAAI,CAAC,WAAW,CAACD,UAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,YAAY;QAChEC,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OACd,CAAC;KACH,CAAC;;GAEH,MAAM;IACL,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,UAAU,CAAC3G,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAChC,CAAC;GACH;CACF;AACD,SAAc,GAAG;EACf,GAAG,EAAE,OAAO;EACZ,KAAK,EAAE,SAAS;CACjB,CAAC;;AClFF,IAAI,SAAS,GAAGd,KAAkB,CAAC,GAAG,CAAC;AACvC,IAAI,QAAQ,GAAGW,OAAM,CAAC,gBAAgB,IAAIA,OAAM,CAAC,sBAAsB,CAAC;AACxE,IAAI+G,SAAO,GAAG/G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAIgH,SAAO,GAAGhH,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,MAAM,GAAGT,IAAiB,CAACwH,SAAO,CAAC,IAAI,SAAS,CAAC;;AAErD,cAAc,GAAG,YAAY;EAC3B,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;;EAEvB,IAAI,KAAK,GAAG,YAAY;IACtB,IAAI,MAAM,EAAE,EAAE,CAAC;IACf,IAAI,MAAM,KAAK,MAAM,GAAGA,SAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,IAAI,EAAE;MACX,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;MACb,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;MACjB,IAAI;QACF,EAAE,EAAE,CAAC;OACN,CAAC,OAAO,CAAC,EAAE;QACV,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;aACd,IAAI,GAAG,SAAS,CAAC;QACtB,MAAM,CAAC,CAAC;OACT;KACF,CAAC,IAAI,GAAG,SAAS,CAAC;IACnB,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;GAC5B,CAAC;;;EAGF,IAAI,MAAM,EAAE;IACV,MAAM,GAAG,YAAY;MACnBA,SAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACzB,CAAC;;GAEH,MAAM,IAAI,QAAQ,IAAI,EAAE/G,OAAM,CAAC,SAAS,IAAIA,OAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;IACzE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,YAAY;MACnB,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;KAC9B,CAAC;;GAEH,MAAM,IAAIgH,SAAO,IAAIA,SAAO,CAAC,OAAO,EAAE;IACrC,IAAI,OAAO,GAAGA,SAAO,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,YAAY;MACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrB,CAAC;;;;;;;GAOH,MAAM;IACL,MAAM,GAAG,YAAY;;MAEnB,SAAS,CAAC,IAAI,CAAChH,OAAM,EAAE,KAAK,CAAC,CAAC;KAC/B,CAAC;GACH;;EAED,OAAO,UAAU,EAAE,EAAE;IACnB,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACvC,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE;MACT,IAAI,GAAG,IAAI,CAAC;MACZ,MAAM,EAAE,CAAC;KACV,CAAC,IAAI,GAAG,IAAI,CAAC;GACf,CAAC;CACH,CAAC;;;;;AC/DF,SAAS,iBAAiB,CAAC,CAAC,EAAE;EAC5B,IAAI,OAAO,EAAE,MAAM,CAAC;EACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE;IAClD,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9F,OAAO,GAAG,SAAS,CAAC;IACpB,MAAM,GAAG,QAAQ,CAAC;GACnB,CAAC,CAAC;EACH,IAAI,CAAC,OAAO,GAAGC,UAAS,CAAC,OAAO,CAAC,CAAC;EAClC,IAAI,CAAC,MAAM,GAAGA,UAAS,CAAC,MAAM,CAAC,CAAC;CACjC;;AAED,OAAgB,GAAG,UAAU,CAAC,EAAE;EAC9B,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;;;;;;ACjBF,YAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI;IACF,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;GAChC,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;GAC1B;CACF,CAAC;;ACFF,mBAAc,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;EAC/BR,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAIL,SAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;EACjD,IAAI,iBAAiB,GAAG6H,qBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClD,IAAI,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC;EACxC,OAAO,CAAC,CAAC,CAAC,CAAC;EACX,OAAO,iBAAiB,CAAC,OAAO,CAAC;CAClC,CAAC;;ACAF,IAAI,IAAI,GAAG5H,KAAkB,CAAC,GAAG,CAAC;AAClC,IAAI,SAAS,GAAGE,UAAuB,EAAE,CAAC;;;;AAI1C,IAAI,OAAO,GAAG,SAAS,CAAC;AACxB,IAAI2H,WAAS,GAAGlH,OAAM,CAAC,SAAS,CAAC;AACjC,IAAI+G,SAAO,GAAG/G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,QAAQ,GAAGA,OAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAImH,QAAM,GAAG7E,QAAO,CAACyE,SAAO,CAAC,IAAI,SAAS,CAAC;AAC3C,IAAI,KAAK,GAAG,YAAY,eAAe,CAAC;AACxC,IAAI,QAAQ,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,OAAO,CAAC;AACzE,IAAI,oBAAoB,GAAG,2BAA2B,GAAGK,qBAA0B,CAAC,CAAC,CAAC;;AAEtF,IAAI,UAAU,GAAG,CAAC,CAAC,YAAY;EAC7B,IAAI;;IAEF,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE5H,IAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE;MAC3F,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACpB,CAAC;;IAEF,OAAO,CAAC2H,QAAM,IAAI,OAAO,qBAAqB,IAAI,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,WAAW,CAAC;GAC7G,CAAC,OAAO,CAAC,EAAE,eAAe;CAC5B,EAAE,CAAC;;;AAGJ,IAAI,UAAU,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,IAAI,CAAC;EACT,OAAO/H,SAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;CAC7E,CAAC;AACF,IAAI,MAAM,GAAG,UAAU,OAAO,EAAE,QAAQ,EAAE;EACxC,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;EACvB,SAAS,CAAC,YAAY;IACpB,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,GAAG,UAAU,QAAQ,EAAE;MAC5B,IAAI,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;MAC/C,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;MAC/B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;MAC7B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;MAC7B,IAAI,MAAM,EAAE,IAAI,CAAC;MACjB,IAAI;QACF,IAAI,OAAO,EAAE;UACX,IAAI,CAAC,EAAE,EAAE;YACP,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;WAChB;UACD,IAAI,OAAO,KAAK,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;eAChC;YACH,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;WAC3B;UACD,IAAI,MAAM,KAAK,QAAQ,CAAC,OAAO,EAAE;YAC/B,MAAM,CAAC8H,WAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;WAC1C,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACpC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;SACxB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;OACtB,CAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,CAAC,CAAC,CAAC;OACX;KACF,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;GACnD,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,WAAW,GAAG,UAAU,OAAO,EAAE;EACnC,IAAI,CAAC,IAAI,CAAClH,OAAM,EAAE,YAAY;IAC5B,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,IAAI,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IAC7B,IAAI,SAAS,EAAE;MACb,MAAM,GAAGqH,QAAO,CAAC,YAAY;QAC3B,IAAIF,QAAM,EAAE;UACVJ,SAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACpD,MAAM,IAAI,OAAO,GAAG/G,OAAM,CAAC,oBAAoB,EAAE;UAChD,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9C,MAAM,IAAI,CAAC,OAAO,GAAGA,OAAM,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE;UACtD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;SACrD;OACF,CAAC,CAAC;;MAEH,OAAO,CAAC,EAAE,GAAGmH,QAAM,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACrD,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IACzB,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;GAC3C,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,WAAW,GAAG,UAAU,OAAO,EAAE;EACnC,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,CAAC;CACpE,CAAC;AACF,IAAI,iBAAiB,GAAG,UAAU,OAAO,EAAE;EACzC,IAAI,CAAC,IAAI,CAACnH,OAAM,EAAE,YAAY;IAC5B,IAAI,OAAO,CAAC;IACZ,IAAImH,QAAM,EAAE;MACVJ,SAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;KAC3C,MAAM,IAAI,OAAO,GAAG/G,OAAM,CAAC,kBAAkB,EAAE;MAC9C,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;KACnD;GACF,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,KAAK,EAAE;EAC7B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC;EAChC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;EACnB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;EACf,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACjD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;CACvB,CAAC;AACF,IAAI,QAAQ,GAAG,UAAU,KAAK,EAAE;EAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,IAAI,CAAC;EACT,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC;EAChC,IAAI;IACF,IAAI,OAAO,KAAK,KAAK,EAAE,MAAMkH,WAAS,CAAC,kCAAkC,CAAC,CAAC;IAC3E,IAAI,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;MAC5B,SAAS,CAAC,YAAY;QACpB,IAAI,OAAO,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACzC,IAAI;UACF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE/G,IAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAEA,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;SACvE,CAAC,OAAO,CAAC,EAAE;UACV,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC1B;OACF,CAAC,CAAC;KACJ,MAAM;MACL,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;MACnB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;MACf,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACxB;GACF,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;GAC7C;CACF,CAAC;;;AAGF,IAAI,CAAC,UAAU,EAAE;;EAEf,QAAQ,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE;IACpCgB,WAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1ClB,UAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI;MACF,QAAQ,CAACE,IAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAEA,IAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KACzD,CAAC,OAAO,GAAG,EAAE;MACZ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzB;GACF,CAAC;;EAEF,QAAQ,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE;IACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;GACjB,CAAC;EACF,QAAQ,CAAC,SAAS,GAAG8C,YAA0B,CAAC,QAAQ,CAAC,SAAS,EAAE;;IAElE,IAAI,EAAE,SAAS,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;MAC3C,IAAI,QAAQ,GAAG,oBAAoB,CAACpB,mBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;MACxE,QAAQ,CAAC,EAAE,GAAG,OAAO,WAAW,IAAI,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;MACpE,QAAQ,CAAC,IAAI,GAAG,OAAO,UAAU,IAAI,UAAU,IAAI,UAAU,CAAC;MAC9D,QAAQ,CAAC,MAAM,GAAGsF,QAAM,GAAGJ,SAAO,CAAC,MAAM,GAAG,SAAS,CAAC;MACtD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MACvB,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MACpC,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;MACjC,OAAO,QAAQ,CAAC,OAAO,CAAC;KACzB;;IAED,OAAO,EAAE,UAAU,UAAU,EAAE;MAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACzC;GACF,CAAC,CAAC;EACH,oBAAoB,GAAG,YAAY;IACjC,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,OAAO,GAAG5G,IAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,GAAGA,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;GACxC,CAAC;EACFiH,qBAA0B,CAAC,CAAC,GAAG,oBAAoB,GAAG,UAAU,CAAC,EAAE;IACjE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO;QAClC,IAAI,oBAAoB,CAAC,CAAC,CAAC;QAC3B,2BAA2B,CAAC,CAAC,CAAC,CAAC;GACpC,CAAC;CACH;;AAEDxF,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChFsB,eAA+B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnDC,WAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,OAAO,GAAGC,KAAkB,CAAC,OAAO,CAAC,CAAC;;;AAGtCxB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE;;EAEpD,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,EAAE;IACzB,IAAI,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;CACF,CAAC,CAAC;AACHA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAIL,QAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;;EAEjE,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE;IAC3B,OAAO+F,eAAc,CAAC/F,QAAO,IAAI,IAAI,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;GACzE;CACF,CAAC,CAAC;AACHK,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,UAAU,IAAIyB,WAAyB,CAAC,UAAU,IAAI,EAAE;EACxF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;CACpC,CAAC,CAAC,EAAE,OAAO,EAAE;;EAEZ,GAAG,EAAE,SAAS,GAAG,CAAC,QAAQ,EAAE;IAC1B,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACjC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAGgE,QAAO,CAAC,YAAY;MAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;MAChB,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,IAAI,SAAS,GAAG,CAAC,CAAC;MAClB7B,MAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,OAAO,EAAE;QACxC,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;UACvC,IAAI,aAAa,EAAE,OAAO;UAC1B,aAAa,GAAG,IAAI,CAAC;UACrB,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;UACvB,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;SAChC,EAAE,MAAM,CAAC,CAAC;OACZ,CAAC,CAAC;MACH,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;;EAED,IAAI,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE;IAC5B,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAG6B,QAAO,CAAC,YAAY;MAC/B7B,MAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,OAAO,EAAE;QACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;OACrD,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;CACF,CAAC,CAAC;;AChRH,OAAS,GAAGnG,IAAiB,CAAC;;;;;;ACI9B,IAAI,cAAc,GAAGA,SAAuB,CAAC,CAAC,CAAC;AAC/C,cAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI,OAAO,GAAGa,KAAI,CAAC,MAAM,KAAKA,KAAI,CAAC,MAAM,GAAGqB,QAAO,GAAG,EAAE,GAAGvB,OAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;EAChF,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAEuH,OAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;CAC3G,CAAC;;ACRF;;;;AAIA,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,MAAM,GAAGtF,WAAO,CAAC,EAAE,CAAC,CAAC;EACzB,IAAI,UAAU,GAAG+D,WAAI,CAAC,CAAC,CAAC;EACxB,IAAI,UAAU,EAAE;IACd,IAAI,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,MAAM,GAAGhD,UAAG,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,CAAC;IACR,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GACtF,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;;ACdF;;AAEA,IAAI,IAAI,GAAG3D,WAAyB,CAAC,CAAC,CAAC;AACvC,IAAImI,UAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;;AAE3B,IAAI,WAAW,GAAG,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,mBAAmB;IAC/E,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;AAE5C,IAAI,cAAc,GAAG,UAAU,EAAE,EAAE;EACjC,IAAI;IACF,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;GACjB,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;GAC5B;CACF,CAAC;;AAEF,OAAgB,GAAG,SAAS,mBAAmB,CAAC,EAAE,EAAE;EAClD,OAAO,WAAW,IAAIA,UAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,iBAAiB,GAAG,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC5G,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;CACzG,CAAC;;;;;;;;;;;;ACXF,IAAI,IAAI,GAAGvB,KAAkB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;AAoBlC,IAAImH,MAAI,GAAGiB,WAAK,CAAC,CAAC,CAAC;AACnB,IAAI7H,IAAE,GAAG8H,SAAG,CAAC,CAAC,CAAC;AACf,IAAIf,MAAI,GAAGgB,cAAO,CAAC,CAAC,CAAC;AACrB,IAAI,OAAO,GAAG3H,OAAM,CAAC,MAAM,CAAC;AAC5B,IAAI,KAAK,GAAGA,OAAM,CAAC,IAAI,CAAC;AACxB,IAAI,UAAU,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;AAC1C,IAAImC,WAAS,GAAG,WAAW,CAAC;AAC5B,IAAI,MAAM,GAAGyF,IAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,IAAI,YAAY,GAAGA,IAAG,CAAC,aAAa,CAAC,CAAC;AACtC,IAAI,MAAM,GAAG,EAAE,CAAC,oBAAoB,CAAC;AACrC,IAAI,cAAc,GAAGC,OAAM,CAAC,iBAAiB,CAAC,CAAC;AAC/C,IAAI,UAAU,GAAGA,OAAM,CAAC,SAAS,CAAC,CAAC;AACnC,IAAI,SAAS,GAAGA,OAAM,CAAC,YAAY,CAAC,CAAC;AACrC,IAAIC,aAAW,GAAG,MAAM,CAAC3F,WAAS,CAAC,CAAC;AACpC,IAAI4F,YAAU,GAAG,OAAO,OAAO,IAAI,UAAU,CAAC;AAC9C,IAAI,OAAO,GAAG/H,OAAM,CAAC,OAAO,CAAC;;AAE7B,IAAI,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAACmC,WAAS,CAAC,IAAI,CAAC,OAAO,CAACA,WAAS,CAAC,CAAC,SAAS,CAAC;;;AAG9E,IAAI,aAAa,GAAGnB,YAAW,IAAIgH,MAAM,CAAC,YAAY;EACpD,OAAOC,aAAO,CAACrI,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE;IACzB,GAAG,EAAE,YAAY,EAAE,OAAOA,IAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;GAC3D,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACZ,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;EACzB,IAAI,SAAS,GAAG4G,MAAI,CAACsB,aAAW,EAAE,GAAG,CAAC,CAAC;EACvC,IAAI,SAAS,EAAE,OAAOA,aAAW,CAAC,GAAG,CAAC,CAAC;EACvClI,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;EACf,IAAI,SAAS,IAAI,EAAE,KAAKkI,aAAW,EAAElI,IAAE,CAACkI,aAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;CACtE,GAAGlI,IAAE,CAAC;;AAEP,IAAI,IAAI,GAAG,UAAU,GAAG,EAAE;EACxB,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAGqI,aAAO,CAAC,OAAO,CAAC9F,WAAS,CAAC,CAAC,CAAC;EACxD,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;EACb,OAAO,GAAG,CAAC;CACZ,CAAC;;AAEF,IAAI,QAAQ,GAAG4F,YAAU,IAAI,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;EAC/E,OAAO,OAAO,EAAE,IAAI,QAAQ,CAAC;CAC9B,GAAG,UAAU,EAAE,EAAE;EAChB,OAAO,EAAE,YAAY,OAAO,CAAC;CAC9B,CAAC;;AAEF,IAAI,eAAe,GAAG,SAAS,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;EACxD,IAAI,EAAE,KAAKD,aAAW,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;EAC3DrI,SAAQ,CAAC,EAAE,CAAC,CAAC;EACb,GAAG,GAAGC,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EAC7BD,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAIK,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;IACxB,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;MACjB,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAEF,IAAE,CAAC,EAAE,EAAE,MAAM,EAAEC,aAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;MACxD,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACxB,MAAM;MACL,IAAIC,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;MAChE,CAAC,GAAGmI,aAAO,CAAC,CAAC,EAAE,EAAE,UAAU,EAAEpI,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;KACtD,CAAC,OAAO,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;GACpC,CAAC,OAAOD,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CACzB,CAAC;AACF,IAAI,iBAAiB,GAAG,SAAS,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE;EACvDH,SAAQ,CAAC,EAAE,CAAC,CAAC;EACb,IAAI,IAAI,GAAGyI,SAAQ,CAAC,CAAC,GAAGtH,UAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;EACpB,IAAI,GAAG,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC3D,OAAO,EAAE,CAAC;CACX,CAAC;AACF,IAAI,OAAO,GAAG,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;EACnC,OAAO,CAAC,KAAK,SAAS,GAAGqH,aAAO,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAACA,aAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1E,CAAC;AACF,IAAI,qBAAqB,GAAG,SAAS,oBAAoB,CAAC,GAAG,EAAE;EAC7D,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAGvI,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;EACxD,IAAI,IAAI,KAAKoI,aAAW,IAAIhI,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;EACvF,OAAO,CAAC,IAAI,CAACA,IAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAIA,IAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC3G,CAAC;AACF,IAAI,yBAAyB,GAAG,SAAS,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE;EACzE,EAAE,GAAGc,UAAS,CAAC,EAAE,CAAC,CAAC;EACnB,GAAG,GAAGlB,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EAC7B,IAAI,EAAE,KAAKoI,aAAW,IAAIhI,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO;EAC/E,IAAI,CAAC,GAAG0G,MAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;EACtB,IAAI,CAAC,IAAI1G,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAEA,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;EAC5F,OAAO,CAAC,CAAC;CACV,CAAC;AACF,IAAI,oBAAoB,GAAG,SAAS,mBAAmB,CAAC,EAAE,EAAE;EAC1D,IAAI,KAAK,GAAG6G,MAAI,CAAC/F,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,CAAC;EACR,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACvB,IAAI,CAACd,IAAG,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAC1F,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;AACF,IAAI,sBAAsB,GAAG,SAAS,qBAAqB,CAAC,EAAE,EAAE;EAC9D,IAAI,KAAK,GAAG,EAAE,KAAKgI,aAAW,CAAC;EAC/B,IAAI,KAAK,GAAGnB,MAAI,CAAC,KAAK,GAAG,SAAS,GAAG/F,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACpD,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,CAAC;EACR,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACvB,IAAId,IAAG,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,GAAGA,IAAG,CAACgI,aAAW,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;GAC/G,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;;;AAGF,IAAI,CAACC,YAAU,EAAE;EACf,OAAO,GAAG,SAAS,MAAM,GAAG;IAC1B,IAAI,IAAI,YAAY,OAAO,EAAE,MAAM,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC7E,IAAI,GAAG,GAAG1H,IAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/D,IAAI,IAAI,GAAG,UAAU,KAAK,EAAE;MAC1B,IAAI,IAAI,KAAKyH,aAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;MACtD,IAAIhI,IAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAIA,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;MAC3E,aAAa,CAAC,IAAI,EAAE,GAAG,EAAED,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAChD,CAAC;IACF,IAAImB,YAAW,IAAI,MAAM,EAAE,aAAa,CAAC8G,aAAW,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;GAClB,CAAC;EACF1H,SAAQ,CAAC,OAAO,CAAC+B,WAAS,CAAC,EAAE,UAAU,EAAE,SAAS,QAAQ,GAAG;IAC3D,OAAO,IAAI,CAAC,EAAE,CAAC;GAChB,CAAC,CAAC;;EAEHsF,WAAK,CAAC,CAAC,GAAG,yBAAyB,CAAC;EACpCC,SAAG,CAAC,CAAC,GAAG,eAAe,CAAC;EACxBnI,WAAyB,CAAC,CAAC,GAAGoI,cAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC;EAC/DnI,UAAwB,CAAC,CAAC,GAAG,qBAAqB,CAAC;EACnDyD,WAAyB,CAAC,CAAC,GAAG,sBAAsB,CAAC;;EAErD,IAAIjC,YAAW,IAAI,CAACkC,QAAqB,EAAE;IACzC9C,SAAQ,CAAC0H,aAAW,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;GAC5E;;EAEDP,OAAM,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE;IACzB,OAAO,IAAI,CAACK,IAAG,CAAC,IAAI,CAAC,CAAC,CAAC;GACxB,CAAC;CACH;;AAEDhG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACmG,YAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;;AAE9E,KAAK,IAAI,UAAU,GAAG;;EAEpB,gHAAgH;EAChH,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,EAAEH,IAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEjE,KAAK,IAAI,gBAAgB,GAAG9G,WAAK,CAAC8G,IAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAGO,UAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEpHvG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACmG,YAAU,EAAE,QAAQ,EAAE;;EAErD,KAAK,EAAE,UAAU,GAAG,EAAE;IACpB,OAAOjI,IAAG,CAAC,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC;QACjC,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;GACxC;;EAED,MAAM,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE;IAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,SAAS,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC;IAC/D,KAAK,IAAI,GAAG,IAAI,cAAc,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;GAC7E;EACD,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE;EACzC,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE;CAC3C,CAAC,CAAC;;AAEH8B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACmG,YAAU,EAAE,QAAQ,EAAE;;EAErD,MAAM,EAAE,OAAO;;EAEf,cAAc,EAAE,eAAe;;EAE/B,gBAAgB,EAAE,iBAAiB;;EAEnC,wBAAwB,EAAE,yBAAyB;;EAEnD,mBAAmB,EAAE,oBAAoB;;EAEzC,qBAAqB,EAAE,sBAAsB;CAC9C,CAAC,CAAC;;;AAGH,KAAK,IAAInG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAACmG,YAAU,IAAIC,MAAM,CAAC,YAAY;EAC1E,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;;;;EAIlB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;CACrG,CAAC,CAAC,EAAE,MAAM,EAAE;EACX,SAAS,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE;IAChC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,EAAE,SAAS,CAAC;IACxB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC5I,SAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO;IACpE,IAAI,CAACmD,QAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;MACvD,IAAI,OAAO,SAAS,IAAI,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;MAC7E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;KACpC,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnB,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;GACtC;CACF,CAAC,CAAC;;;AAGH,OAAO,CAACJ,WAAS,CAAC,CAAC,YAAY,CAAC,IAAIgB,KAAkB,CAAC,OAAO,CAAChB,WAAS,CAAC,EAAE,YAAY,EAAE,OAAO,CAACA,WAAS,CAAC,CAAC,OAAO,CAAC,CAAC;;AAErHX,eAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAElCA,eAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;;AAEnCA,eAAc,CAACxB,OAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;;ACzO1C;;;;AAIA,cAAc,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE;EACpC,IAAI,EAAE,GAAG,CAACE,KAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;EACjD,IAAI,GAAG,GAAG,EAAE,CAAC;EACb,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EACpB0B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGN,MAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;CAC/E,CAAC;;ACTF;;AAEA,IAAI,IAAI,GAAGjC,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,QAAQ,EAAE,UAAU,OAAO,EAAE;EACpD,OAAO,SAAS,MAAM,CAAC,EAAE,EAAE;IACzB,OAAO,OAAO,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GACzD,CAAC;CACH,CAAC,CAAC;;ACRH;;AAEA,IAAIwG,MAAI,GAAGvG,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;EAChD,OAAO,SAAS,IAAI,CAAC,EAAE,EAAE;IACvB,OAAO,KAAK,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,CAACwG,MAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GACrD,CAAC;CACH,CAAC,CAAC;;ACRH;;AAEA,IAAIA,MAAI,GAAGvG,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,mBAAmB,EAAE,UAAU,kBAAkB,EAAE;EAC1E,OAAO,SAAS,iBAAiB,CAAC,EAAE,EAAE;IACpC,OAAO,kBAAkB,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAACwG,MAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GAC/E,CAAC;CACH,CAAC,CAAC;;ACRH;;;AAGAvG,UAAwB,CAAC,UAAU,EAAE,UAAU,SAAS,EAAE;EACxD,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC3B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;GAChE,CAAC;CACH,CAAC,CAAC;;ACPH;;;AAGAC,UAAwB,CAAC,UAAU,EAAE,UAAU,SAAS,EAAE;EACxD,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC3B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;GAChE,CAAC;CACH,CAAC,CAAC;;ACPH;;;AAGAC,UAAwB,CAAC,cAAc,EAAE,UAAU,aAAa,EAAE;EAChE,OAAO,SAAS,YAAY,CAAC,EAAE,EAAE;IAC/B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;GACxE,CAAC;CACH,CAAC,CAAC;;ACPH;;AAEA,IAAIgJ,2BAAyB,GAAG/I,WAAyB,CAAC,CAAC,CAAC;;AAE5DE,UAAwB,CAAC,0BAA0B,EAAE,YAAY;EAC/D,OAAO,SAAS,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE;IAChD,OAAO6I,2BAAyB,CAACxH,UAAS,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;GACtD,CAAC;CACH,CAAC,CAAC;;ACRH;;;;AAIAvB,UAAwB,CAAC,gBAAgB,EAAE,YAAY;EACrD,OAAO,SAAS,cAAc,CAAC,EAAE,EAAE;IACjC,OAAOgJ,UAAe,CAACtH,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;GACtC,CAAC;CACH,CAAC,CAAC;;ACRH;;;;AAIA1B,UAAwB,CAAC,MAAM,EAAE,YAAY;EAC3C,OAAO,SAAS,IAAI,CAAC,EAAE,EAAE;IACvB,OAAOyB,WAAK,CAACC,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;GAC5B,CAAC;CACH,CAAC,CAAC;;ACRH;AACA1B,UAAwB,CAAC,qBAAqB,EAAE,YAAY;EAC1D,OAAOE,cAA6B,CAAC,CAAC,CAAC;CACxC,CAAC,CAAC;;ACHH;;;AAGAqC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAEvC,aAA2B,EAAE,CAAC,CAAC;;ACHlF;AACA,cAAc,GAAG,MAAM,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;;EAE9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAChE,CAAC;;ACJF;;AAEAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACF/D,IAAIO,IAAE,GAAGP,SAAuB,CAAC,CAAC,CAAC;AACnC,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;AAChC,IAAI,MAAM,GAAG,uBAAuB,CAAC;AACrC,IAAI,IAAI,GAAG,MAAM,CAAC;;;AAGlB,IAAI,IAAI,MAAM,IAAIE,YAAyB,IAAIK,IAAE,CAAC,MAAM,EAAE,IAAI,EAAE;EAC9D,YAAY,EAAE,IAAI;EAClB,GAAG,EAAE,YAAY;IACf,IAAI;MACF,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,EAAE,CAAC;KACX;GACF;CACF,CAAC,CAAC;;ACXHgC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,GAAG,EAAE,SAAS,GAAG,CAAC,QAAQ,EAAE;IAC1B,IAAI,GAAG,GAAGhB,UAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,GAAGL,SAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,GAAG,GAAG,CAAC,EAAE;MACd,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACfH,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC,IAAI,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;;;AAG1CqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE1F,aAAa,EAAE,SAAS,aAAa,CAAC,CAAC,EAAE;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,CAAC;IACT,OAAO,IAAI,GAAG,CAAC,EAAE;MACf,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;MACvB,IAAIf,gBAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,GAAG,4BAA4B,CAAC,CAAC;MACpG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;UACnB,YAAY,CAAC,IAAI,CAAC;UAClB,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,KAAK,EAAE,IAAI,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;OAC1E,CAAC;KACH,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACpBH;;AAEA,aAAc,GAAG,UAAU,SAAS,EAAE;EACpC,OAAO,UAAU,IAAI,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,GAAG,MAAM,CAACH,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAGJ,UAAS,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;IACvD,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;QAC9F,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;GACjF,CAAC;CACH,CAAC;;ACdF,IAAI,GAAG,GAAGjB,SAAuB,CAAC,KAAK,CAAC,CAAC;AACzCuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,WAAW,EAAE,SAAS,WAAW,CAAC,GAAG,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACJH,iBAAc,GAAG,SAAS,MAAM,CAAC,KAAK,EAAE;EACtC,IAAI,GAAG,GAAG,MAAM,CAAClB,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EAChC,IAAI,GAAG,GAAG,EAAE,CAAC;EACb,IAAI,CAAC,GAAGJ,UAAS,CAAC,KAAK,CAAC,CAAC;EACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,MAAM,UAAU,CAAC,yBAAyB,CAAC,CAAC;EACxE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;EAC/D,OAAO,GAAG,CAAC;CACZ,CAAC;;ACTFsB,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,MAAM,EAAEvC,aAA2B;CACpC,CAAC,CAAC;;ACLH;;;AAGA,IAAI,KAAK,GAAGA,IAAiB,CAAC,OAAO,CAAC,CAAC;AACvC,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,QAAQ,CAAC;EACb,OAAOD,SAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAGoB,IAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC;CAClG,CAAC;;ACPF;;;;AAIA,kBAAc,GAAG,UAAU,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;EACnD,IAAI8H,SAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,wBAAwB,CAAC,CAAC;EACzF,OAAO,MAAM,CAAC5H,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAC9B,CAAC;;ACPF,IAAI6H,OAAK,GAAGlJ,IAAiB,CAAC,OAAO,CAAC,CAAC;AACvC,kBAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI;IACF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GAChB,CAAC,OAAO,CAAC,EAAE;IACV,IAAI;MACF,EAAE,CAACkJ,OAAK,CAAC,GAAG,KAAK,CAAC;MAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;KACxB,CAAC,OAAO,CAAC,EAAE,eAAe;GAC5B,CAAC,OAAO,IAAI,CAAC;CACf,CAAC;;ACNF,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;;AAElC3G,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE;EACpF,UAAU,EAAE,SAAS,UAAU,CAAC,YAAY,uBAAuB;IACjE,IAAI,IAAI,GAAGmJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,KAAK,GAAGjI,SAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,WAAW;QACd,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;GACzD;CACF,CAAC,CAAC;;ACZH,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;;AAE9BqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;EAClF,QAAQ,EAAE,SAAS,QAAQ,CAAC,YAAY,gCAAgC;IACtE,IAAI,IAAI,GAAGmJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,IAAI,GAAG,GAAGjI,SAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,WAAW,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAACA,SAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IACjF,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,SAAS;QACZ,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;GACrD;CACF,CAAC,CAAC;;ACfH,IAAI,QAAQ,GAAG,UAAU,CAAC;;AAE1BqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;EACjF,QAAQ,EAAE,SAAS,QAAQ,CAAC,YAAY,uBAAuB;IAC7D,OAAO,CAAC,CAAC,CAACmJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;OAC5C,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GAC3E;CACF,CAAC,CAAC;;;;ACRH,UAAc,GAAG,YAAY;EAC3B,IAAI,IAAI,GAAG/I,SAAQ,CAAC,IAAI,CAAC,CAAC;EAC1B,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC;EAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG,CAAC;EACnC,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC;EAClC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;EAChC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC;EAC/B,OAAO,MAAM,CAAC;CACf,CAAC;;ACZF;AACA,IAAIJ,YAAyB,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,EAAEE,SAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;EACvG,YAAY,EAAE,IAAI;EAClB,GAAG,EAAEC,MAAmB;CACzB,CAAC,CAAC;;ACGH,aAAc,GAAG,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;EAC5C,IAAI,MAAM,GAAGoI,IAAG,CAAC,GAAG,CAAC,CAAC;EACtB,IAAI,GAAG,GAAG,IAAI,CAAClH,QAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAClB,IAAIY,MAAK,CAAC,YAAY;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;GACxB,CAAC,EAAE;IACFlB,SAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvCL,KAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;;;QAGtC,UAAU,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;;;QAG/D,UAAU,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE;KACxD,CAAC;GACH;CACF,CAAC;;AC3BF;AACAV,SAAwB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;EAErE,OAAO,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE;IAE7B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,MAAM,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GACrF,EAAE,MAAM,CAAC,CAAC;CACZ,CAAC,CAAC;;ACTH;AACAA,SAAwB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;;EAE3E,OAAO,CAAC,SAAS,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE;IAElD,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,WAAW,IAAI,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,EAAE,KAAK,SAAS;QACnB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;GACzD,EAAE,QAAQ,CAAC,CAAC;CACd,CAAC,CAAC;;ACXH;AACAA,SAAwB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;EAErE,IAAI,QAAQ,GAAGE,SAAuB,CAAC;EACvC,IAAI,MAAM,GAAG,MAAM,CAAC;EACpB,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC;EACpB,IAAI,MAAM,GAAG,OAAO,CAAC;EACrB,IAAI,MAAM,GAAG,QAAQ,CAAC;EACtB,IAAI,UAAU,GAAG,WAAW,CAAC;EAC7B;IACE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACxB;IACA,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;;IAE5C,MAAM,GAAG,UAAU,SAAS,EAAE,KAAK,EAAE;MACnC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;MAC1B,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;;MAEtD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;MACvE,IAAI,MAAM,GAAG,EAAE,CAAC;MAChB,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,GAAG,GAAG,EAAE;mBAC/B,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC;mBAC/B,SAAS,CAAC,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;mBAC7B,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;MAC1C,IAAI,aAAa,GAAG,CAAC,CAAC;MACtB,IAAI,UAAU,GAAG,KAAK,KAAK,SAAS,GAAG,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC;;MAEhE,IAAI,aAAa,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;MAC9D,IAAI,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;;MAEhD,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;MACnF,OAAO,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;;QAEzC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,SAAS,GAAG,aAAa,EAAE;UAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;UAGtD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY;YACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;WAClG,CAAC,CAAC;UACH,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;UAC3F,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;UAC9B,aAAa,GAAG,SAAS,CAAC;UAC1B,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,MAAM;SACzC;QACD,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;OAC5E;MACD,IAAI,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE;QACpC,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC5D,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;MAChD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC;KAC3E,CAAC;;GAEH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;IAC5C,MAAM,GAAG,UAAU,SAAS,EAAE,KAAK,EAAE;MACnC,OAAO,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;KAC1F,CAAC;GACH;;EAED,OAAO,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE;IACvC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,SAAS,IAAI,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;GACnG,EAAE,MAAM,CAAC,CAAC;CACZ,CAAC,CAAC;;ACtEH;AACAF,SAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;;EAExE,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE;IAE9B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,MAAM,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GACtF,EAAE,OAAO,CAAC,CAAC;CACb,CAAC,CAAC;;ACLH,mBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;EAC/C,IAAI,KAAK,IAAI,MAAM,EAAEoJ,SAAe,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE5I,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;OACvE,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;CAC5B,CAAC;;ACGF+B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACvC,WAAyB,CAAC,UAAU,IAAI,EAAE,CAAmB,EAAE,CAAC,EAAE,OAAO,EAAE;;EAE1G,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,iDAAiD;IAC5E,IAAI,CAAC,GAAG0B,SAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;IACjD,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAGsE,sBAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;IACnC,IAAI,OAAO,EAAE,KAAK,GAAGlF,IAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;;IAExE,IAAI,MAAM,IAAI,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,IAAImF,YAAW,CAAC,MAAM,CAAC,CAAC,EAAE;MAC/D,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACzFoD,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,GAAGnD,SAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;OACxG;KACF,MAAM;MACL,MAAM,GAAGhF,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;MAC5B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;QACpDmI,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;OAC5E;KACF;IACD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;;AC/BH9G,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,SAAS,CAAC,GAAG,eAAe;EAC5B,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;CACzC,CAAC,EAAE,OAAO,EAAE;;EAEX,EAAE,EAAE,SAAS,EAAE,gBAAgB;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,GAAG,KAAK,OAAO,IAAI,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO,IAAI,GAAG,KAAK,EAAEqJ,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;AClBH;;;AAGA9G,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAEvC,gBAA+B,EAAE,CAAC,CAAC;;AAE7EE,iBAAgC,CAAC,YAAY,CAAC,CAAC;;;;ACF/C,IAAI,KAAK,GAAGF,aAA2B,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,IAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9DuC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE;EAC/C,IAAI,EAAE,SAAS,IAAI,CAAC,UAAU,2BAA2B;IACvD,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACjF;CACF,CAAC,CAAC;AACHrC,iBAAgC,CAAC,GAAG,CAAC,CAAC;;;;ACVtC,IAAIoJ,OAAK,GAAGtJ,aAA2B,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAIuJ,KAAG,GAAG,WAAW,CAAC;AACtB,IAAIC,QAAM,GAAG,IAAI,CAAC;;AAElB,IAAID,KAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAACA,KAAG,CAAC,CAAC,YAAY,EAAEC,QAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9DjH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGiH,QAAM,EAAE,OAAO,EAAE;EAC/C,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,2BAA2B;IACjE,OAAOF,OAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACjF;CACF,CAAC,CAAC;AACHpJ,iBAAgC,CAACqJ,KAAG,CAAC,CAAC;;ACbtC;;;AAGAhH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;AAEhEE,iBAAgC,CAAC,MAAM,CAAC,CAAC;;ACLzC;;AAEA,IAAI,SAAS,GAAGF,OAAoB,CAAC,QAAQ,CAAC;;AAE9CuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,QAAQ,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC9B,OAAO,OAAO,EAAE,IAAI,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;GAC/C;CACF,CAAC,CAAC;;ACRH;;AAEA,IAAIkH,OAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,cAAc,GAAG,SAAS,SAAS,CAAC,EAAE,EAAE;EACtC,OAAO,CAAC1J,SAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI0J,OAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;CAC1D,CAAC;;ACLF;;;AAGAlH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACHtE;;;AAGA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,aAAa,EAAE,SAAS,aAAa,CAAC,MAAM,EAAE;IAC5C,OAAOmH,UAAS,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;GAC7D;CACF,CAAC,CAAC;;ACTH;;;AAGAnH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE;;IAE5B,OAAO,MAAM,IAAI,MAAM,CAAC;GACzB;CACF,CAAC,CAAC;;ACRH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;ACH5D;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;;ACHtE;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;;ACHrE;AACA,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;EAC/C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACvE,CAAC;;ACHF;;;AAGA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;AAExBA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM;;KAEnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;;KAE3C,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ;CAChC,EAAE,MAAM,EAAE;EACT,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,iBAAiB;QAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;QACtBoH,UAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;ACjBH;;AAEA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;AAExB,SAAS,KAAK,CAAC,CAAC,EAAE;EAChB,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClG;;;AAGDpH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;;ACT1F;;AAEA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;;AAGxBA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE;EACvE,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;GAC5D;CACF,CAAC,CAAC;;ACTH;AACA,aAAc,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE;;EAE7C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;CACrD,CAAC;;ACJF;;;;AAIAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAOqH,SAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;GACpD;CACF,CAAC,CAAC;;ACRH;;;AAGArH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;GAC1E;CACF,CAAC,CAAC;;ACPH;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;GACpC;CACF,CAAC,CAAC;;ACRH;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,cAAc,GAAG,CAAC,CAAC,MAAM;;KAEpB,MAAM,CAAC,EAAE,CAAC,GAAG,kBAAkB,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,sBAAsB;;KAEtE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;IACzB,SAAS,KAAK,CAAC,CAAC,EAAE;EACpB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACpF,GAAG,MAAM,CAAC;;ACTX;;;;AAIAA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAIsH,UAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAEA,UAAM,EAAE,CAAC,CAAC;;ACJnF;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AAC1C,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;AAEzB,IAAI,eAAe,GAAG,UAAU,CAAC,EAAE;EACjC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;CACtC,CAAC;;AAEF,eAAc,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;EACjD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,KAAK,GAAGD,SAAI,CAAC,CAAC,CAAC,CAAC;EACpB,IAAI,CAAC,EAAE,MAAM,CAAC;EACd,IAAI,IAAI,GAAG,KAAK,EAAE,OAAO,KAAK,GAAG,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;EAC/F,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,IAAI,IAAI,CAAC;EACrC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;;EAExB,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;EAChE,OAAO,KAAK,GAAG,MAAM,CAAC;CACvB,CAAC;;ACtBF;;;AAGArH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAEvC,WAAyB,EAAE,CAAC,CAAC;;ACHlE;;AAEA,IAAI8J,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBvH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;IACpC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,GAAG,IAAI,EAAE;MACf,GAAG,GAAGuH,KAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAC1B,IAAI,IAAI,GAAG,GAAG,EAAE;QACd,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;QACjB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC;OACZ,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE;QAClB,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;QACjB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;OAClB,MAAM,GAAG,IAAI,GAAG,CAAC;KACnB;IACD,OAAO,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAC7D;CACF,CAAC,CAAC;;ACxBH;;AAEA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;;;AAGtBvH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;CACxD,CAAC,EAAE,MAAM,EAAE;EACV,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;IACxB,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IACrB,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;GAC1F;CACF,CAAC,CAAC;;AChBH;;;AAGAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACHhE;;;AAGAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;GAClC;CACF,CAAC,CAAC;;ACPH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;GAC/B;CACF,CAAC,CAAC;;ACPH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAEvC,SAAuB,EAAE,CAAC,CAAC;;ACH9D;;;AAGA,IAAI+J,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnBxH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;CACrC,CAAC,EAAE,MAAM,EAAE;EACV,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvB,CAACgK,UAAK,CAAC,CAAC,CAAC,GAAGA,UAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1B,CAACD,KAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;GAC/C;CACF,CAAC,CAAC;;ACdH;;;AAGA,IAAIA,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBxH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,IAAI,CAAC,GAAGyH,UAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAGA,UAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAKD,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC9E;CACF,CAAC,CAAC;;ACXH;;;AAGAxH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;;;ACJH,IAAI,SAAS,GAAGvC,cAA4B,CAAC,IAAI,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;EAC1B,QAAQ,EAAE,SAAS,QAAQ,CAAC,EAAE,wBAAwB;IACpD,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GAC7E;CACF,CAAC,CAAC;;AAEHrC,iBAAgC,CAAC,UAAU,CAAC,CAAC;;ACT7C,IAAI+J,QAAM,GAAGjK,UAAwB,CAAC,CAAC,CAAC;AACxC,kBAAc,GAAG,UAAU,SAAS,EAAE;EACpC,OAAO,UAAU,EAAE,EAAE;IACnB,IAAI,CAAC,GAAGuB,UAAS,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,IAAI,GAAGqB,WAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,CAAC;IACR,OAAO,MAAM,GAAG,CAAC,EAAE,IAAIqH,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MACtD,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD,CAAC,OAAO,MAAM,CAAC;GACjB,CAAC;CACH,CAAC;;ACfF;;AAEA,IAAI,OAAO,GAAGjK,cAA6B,CAAC,KAAK,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,EAAE;IAC1B,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;GACpB;CACF,CAAC,CAAC;;ACRH;;AAEA,IAAI,QAAQ,GAAGvC,cAA6B,CAAC,IAAI,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,OAAO,EAAE,SAAS,OAAO,CAAC,EAAE,EAAE;IAC5B,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;GACrB;CACF,CAAC,CAAC;;ACRH;;;;;;;AAOAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,yBAAyB,EAAE,SAAS,yBAAyB,CAAC,MAAM,EAAE;IACpE,IAAI,CAAC,GAAGhB,UAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,GAAG4F,WAAI,CAAC,CAAC,CAAC;IACrB,IAAI,IAAI,GAAG+C,QAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,EAAE,IAAI,CAAC;IACd,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACtB,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MACnC,IAAI,IAAI,KAAK,SAAS,EAAEb,eAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAC3D;IACD,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;ACrBH;;;;;AAKA,cAAc,GAAG,UAAU,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;EAC5D,IAAI,CAAC,GAAG,MAAM,CAAChI,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EAC9B,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;EAC5B,IAAI,OAAO,GAAG,UAAU,KAAK,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;EAClE,IAAI,YAAY,GAAGH,SAAQ,CAAC,SAAS,CAAC,CAAC;EACvC,IAAI,YAAY,IAAI,YAAY,IAAI,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5D,IAAI,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;EAC1C,IAAI,YAAY,GAAGiJ,aAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;EAC7E,IAAI,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;EACjF,OAAO,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;CACnD,CAAC;;ACdF,IAAIC,WAAS,GAAGzJ,OAAM,CAAC,SAAS,CAAC;;AAEjC,cAAc,GAAGyJ,WAAS,IAAIA,WAAS,CAAC,SAAS,IAAI,EAAE,CAAC;;;;;;;;ACIxD7H,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,mCAAmC,CAAC,IAAI,CAAC8H,UAAS,CAAC,EAAE,QAAQ,EAAE;EAC7F,QAAQ,EAAE,SAAS,QAAQ,CAAC,SAAS,2BAA2B;IAC9D,OAAOC,UAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;GACrF;CACF,CAAC,CAAC;;;;;;;;ACJH/H,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,mCAAmC,CAAC,IAAI,CAAC8H,UAAS,CAAC,EAAE,QAAQ,EAAE;EAC7F,MAAM,EAAE,SAAS,MAAM,CAAC,SAAS,2BAA2B;IAC1D,OAAOC,UAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC;GACtF;CACF,CAAC,CAAC;;ACXH;;;;AAIA,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACrB,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAACD,UAAS,CAAC,CAAC;AACtC,IAAIE,MAAI,GAAG,UAAU,GAAG,EAAE;EACxB,OAAO,UAAU,EAAE,EAAE,IAAI,kBAAkB;IACzC,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;IACxD,OAAO,GAAG,CAAC,SAAS,GAAG,YAAY;;MAEjC,CAAC,OAAO,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACjE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;GACf,CAAC;CACH,CAAC;AACFhI,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE;EAChD,UAAU,EAAEgI,MAAI,CAAC5J,OAAM,CAAC,UAAU,CAAC;EACnC,WAAW,EAAE4J,MAAI,CAAC5J,OAAM,CAAC,WAAW,CAAC;CACtC,CAAC,CAAC;;ACjBH4B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,EAAE;EAC7B,YAAY,EAAEiI,KAAK,CAAC,GAAG;EACvB,cAAc,EAAEA,KAAK,CAAC,KAAK;CAC5B,CAAC,CAAC;;ACEH,IAAIxH,UAAQ,GAAGuF,IAAG,CAAC,UAAU,CAAC,CAAC;AAC/B,IAAI,aAAa,GAAGA,IAAG,CAAC,aAAa,CAAC,CAAC;AACvC,IAAI,WAAW,GAAG7F,UAAS,CAAC,KAAK,CAAC;;AAElC,IAAI,YAAY,GAAG;EACjB,WAAW,EAAE,IAAI;EACjB,mBAAmB,EAAE,KAAK;EAC1B,YAAY,EAAE,KAAK;EACnB,cAAc,EAAE,KAAK;EACrB,WAAW,EAAE,KAAK;EAClB,aAAa,EAAE,KAAK;EACpB,YAAY,EAAE,IAAI;EAClB,oBAAoB,EAAE,KAAK;EAC3B,QAAQ,EAAE,KAAK;EACf,iBAAiB,EAAE,KAAK;EACxB,cAAc,EAAE,KAAK;EACrB,eAAe,EAAE,KAAK;EACtB,iBAAiB,EAAE,KAAK;EACxB,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,KAAK;EACpB,YAAY,EAAE,KAAK;EACnB,QAAQ,EAAE,IAAI;EACd,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,KAAK;EACb,WAAW,EAAE,KAAK;EAClB,aAAa,EAAE,KAAK;EACpB,aAAa,EAAE,KAAK;EACpB,cAAc,EAAE,KAAK;EACrB,YAAY,EAAE,KAAK;EACnB,aAAa,EAAE,KAAK;EACpB,gBAAgB,EAAE,KAAK;EACvB,gBAAgB,EAAE,KAAK;EACvB,cAAc,EAAE,IAAI;EACpB,gBAAgB,EAAE,KAAK;EACvB,aAAa,EAAE,KAAK;EACpB,SAAS,EAAE,KAAK;CACjB,CAAC;;AAEF,KAAK,IAAI,WAAW,GAAGE,WAAO,CAAC,YAAY,CAAC,EAAE6H,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG,WAAW,CAAC,MAAM,EAAEA,GAAC,EAAE,EAAE;EAChF,IAAIC,MAAI,GAAG,WAAW,CAACD,GAAC,CAAC,CAAC;EAC1B,IAAI,QAAQ,GAAG,YAAY,CAACC,MAAI,CAAC,CAAC;EAClC,IAAI,UAAU,GAAG/J,OAAM,CAAC+J,MAAI,CAAC,CAAC;EAC9B,IAAI,KAAK,GAAG,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC;EAC/C,IAAI,GAAG,CAAC;EACR,IAAI,KAAK,EAAE;IACT,IAAI,CAAC,KAAK,CAAC1H,UAAQ,CAAC,EAAEtC,KAAI,CAAC,KAAK,EAAEsC,UAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAEtC,KAAI,CAAC,KAAK,EAAE,aAAa,EAAEgK,MAAI,CAAC,CAAC;IAC5DhI,UAAS,CAACgI,MAAI,CAAC,GAAG,WAAW,CAAC;IAC9B,IAAI,QAAQ,EAAE,KAAK,GAAG,IAAIC,kBAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE5J,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE4J,kBAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;GACpG;CACF;;;;;;;;;;;;;AC/CD,CAAC,CAAC,SAAS,MAAM,EAAE;;EAGjB,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;EAC1B,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC;EAC/B,IAAI,SAAS,CAAC;EACd,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;EACzD,IAAI,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;EACtD,IAAI,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAC;EACrE,IAAI,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;;EAE/D,IAAI,QAAQ,GAAG,QAAa,KAAK,QAAQ,CAAC;EAC1C,IAAI,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;EACxC,IAAI,OAAO,EAAE;IACX,IAAI,QAAQ,EAAE;;;MAGZ,cAAc,GAAG,OAAO,CAAC;KAC1B;;;IAGD,OAAO;GACR;;;;EAID,OAAO,GAAG,MAAM,CAAC,kBAAkB,GAAG,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;;EAErE,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;;IAEjD,IAAI,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7F,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;;;;IAI7C,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;;IAE7D,OAAO,SAAS,CAAC;GAClB;EACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;;;;;;;;;;;EAYpB,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IAC9B,IAAI;MACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;KACnD,CAAC,OAAO,GAAG,EAAE;MACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;KACpC;GACF;;EAED,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;EAC9C,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;EAC9C,IAAI,iBAAiB,GAAG,WAAW,CAAC;EACpC,IAAI,iBAAiB,GAAG,WAAW,CAAC;;;;EAIpC,IAAI,gBAAgB,GAAG,EAAE,CAAC;;;;;;EAM1B,SAAS,SAAS,GAAG,EAAE;EACvB,SAAS,iBAAiB,GAAG,EAAE;EAC/B,SAAS,0BAA0B,GAAG,EAAE;;;;EAIxC,IAAI,iBAAiB,GAAG,EAAE,CAAC;EAC3B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY;IAC9C,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;EACrC,IAAI,uBAAuB,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzE,IAAI,uBAAuB;MACvB,uBAAuB,KAAK,EAAE;MAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EAAE;;;IAGxD,iBAAiB,GAAG,uBAAuB,CAAC;GAC7C;;EAED,IAAI,EAAE,GAAG,0BAA0B,CAAC,SAAS;IAC3C,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;EACzD,iBAAiB,CAAC,SAAS,GAAG,EAAE,CAAC,WAAW,GAAG,0BAA0B,CAAC;EAC1E,0BAA0B,CAAC,WAAW,GAAG,iBAAiB,CAAC;EAC3D,0BAA0B,CAAC,iBAAiB,CAAC;IAC3C,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;;;;EAItD,SAAS,qBAAqB,CAAC,SAAS,EAAE;IACxC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;MACnD,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;OAClC,CAAC;KACH,CAAC,CAAC;GACJ;;EAED,OAAO,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE;IAC7C,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;IAC9D,OAAO,IAAI;QACP,IAAI,KAAK,iBAAiB;;;QAG1B,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,mBAAmB;QACvD,KAAK,CAAC;GACX,CAAC;;EAEF,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;IAC9B,IAAI,MAAM,CAAC,cAAc,EAAE;MACzB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;KAC3D,MAAM;MACL,MAAM,CAAC,SAAS,GAAG,0BAA0B,CAAC;MAC9C,IAAI,EAAE,iBAAiB,IAAI,MAAM,CAAC,EAAE;QAClC,MAAM,CAAC,iBAAiB,CAAC,GAAG,mBAAmB,CAAC;OACjD;KACF;IACD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;GACf,CAAC;;;;;;EAMF,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;IAC5B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;GACzB,CAAC;;EAEF,SAAS,aAAa,CAAC,SAAS,EAAE;IAChC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;MAC5C,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;MACzD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;OACpB,MAAM;QACL,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;QACxB,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;UACjC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;YACzD,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACxC,EAAE,SAAS,GAAG,EAAE;YACf,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACvC,CAAC,CAAC;SACJ;;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE;;;;;;;;;;;;;;;;UAgBrD,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;UACzB,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB,EAAE,MAAM,CAAC,CAAC;OACZ;KACF;;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;MAC/D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;;IAED,IAAI,eAAe,CAAC;;IAEpB,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;MAC5B,SAAS,0BAA0B,GAAG;QACpC,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;UAC3C,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,CAAC,CAAC;OACJ;;MAED,OAAO,eAAe;;;;;;;;;;;;;QAapB,eAAe,GAAG,eAAe,CAAC,IAAI;UACpC,0BAA0B;;;UAG1B,0BAA0B;SAC3B,GAAG,0BAA0B,EAAE,CAAC;KACpC;;;;IAID,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;GACxB;;EAED,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;EAC/C,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,YAAY;IACzD,OAAO,IAAI,CAAC;GACb,CAAC;EACF,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;;;;;EAKtC,OAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IAC5D,IAAI,IAAI,GAAG,IAAI,aAAa;MAC1B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;KAC1C,CAAC;;IAEF,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;QACvC,IAAI;QACJ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;UAChC,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SACjD,CAAC,CAAC;GACR,CAAC;;EAEF,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAChD,IAAI,KAAK,GAAG,sBAAsB,CAAC;;IAEnC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;MAClC,IAAI,KAAK,KAAK,iBAAiB,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;OACjD;;MAED,IAAI,KAAK,KAAK,iBAAiB,EAAE;QAC/B,IAAI,MAAM,KAAK,OAAO,EAAE;UACtB,MAAM,GAAG,CAAC;SACX;;;;QAID,OAAO,UAAU,EAAE,CAAC;OACrB;;MAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;MACxB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;;MAElB,OAAO,IAAI,EAAE;QACX,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChC,IAAI,QAAQ,EAAE;UACZ,IAAI,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;UAC5D,IAAI,cAAc,EAAE;YAClB,IAAI,cAAc,KAAK,gBAAgB,EAAE,SAAS;YAClD,OAAO,cAAc,CAAC;WACvB;SACF;;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;;;UAG7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;;SAE5C,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;UACrC,IAAI,KAAK,KAAK,sBAAsB,EAAE;YACpC,KAAK,GAAG,iBAAiB,CAAC;YAC1B,MAAM,OAAO,CAAC,GAAG,CAAC;WACnB;;UAED,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;SAExC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;UACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACvC;;QAED,KAAK,GAAG,iBAAiB,CAAC;;QAE1B,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;;;UAG5B,KAAK,GAAG,OAAO,CAAC,IAAI;cAChB,iBAAiB;cACjB,sBAAsB,CAAC;;UAE3B,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;YACnC,SAAS;WACV;;UAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,GAAG;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;WACnB,CAAC;;SAEH,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;UAClC,KAAK,GAAG,iBAAiB,CAAC;;;UAG1B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;UACzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;SAC1B;OACF;KACF,CAAC;GACH;;;;;;EAMD,SAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC9C,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,KAAK,SAAS,EAAE;;;MAGxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAExB,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;QAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;;;UAG5B,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;UAC1B,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;UACxB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;UAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;;;YAG9B,OAAO,gBAAgB,CAAC;WACzB;SACF;;QAED,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;QACzB,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS;UACzB,gDAAgD,CAAC,CAAC;OACrD;;MAED,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;IAE9D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;MAC3B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;MACzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;MACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;MACxB,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;;IAEtB,IAAI,EAAE,IAAI,EAAE;MACV,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;MACzB,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;MAChE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;MACxB,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,IAAI,CAAC,IAAI,EAAE;;;MAGb,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;;MAG1C,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;;;MAQhC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;OACzB;;KAEF,MAAM;;MAEL,OAAO,IAAI,CAAC;KACb;;;;IAID,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,gBAAgB,CAAC;GACzB;;;;EAID,qBAAqB,CAAC,EAAE,CAAC,CAAC;;EAE1B,EAAE,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC;;;;;;;EAOpC,EAAE,CAAC,cAAc,CAAC,GAAG,WAAW;IAC9B,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,EAAE,CAAC,QAAQ,GAAG,WAAW;IACvB,OAAO,oBAAoB,CAAC;GAC7B,CAAC;;EAEF,SAAS,YAAY,CAAC,IAAI,EAAE;IAC1B,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;;IAEhC,IAAI,CAAC,IAAI,IAAI,EAAE;MACb,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;;IAED,IAAI,CAAC,IAAI,IAAI,EAAE;MACb,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;MAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;GAC7B;;EAED,SAAS,aAAa,CAAC,KAAK,EAAE;IAC5B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC;IAClB,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;GAC3B;;EAED,SAAS,OAAO,CAAC,WAAW,EAAE;;;;IAI5B,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;GAClB;;EAED,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;MACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChB;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;;;;IAIf,OAAO,SAAS,IAAI,GAAG;MACrB,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,GAAG,IAAI,MAAM,EAAE;UACjB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;UACjB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;UAClB,OAAO,IAAI,CAAC;SACb;OACF;;;;;MAKD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;MACjB,OAAO,IAAI,CAAC;KACb,CAAC;GACH,CAAC;;EAEF,SAAS,MAAM,CAAC,QAAQ,EAAE;IACxB,IAAI,QAAQ,EAAE;MACZ,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;MAC9C,IAAI,cAAc,EAAE;QAClB,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OACtC;;MAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;QACvC,OAAO,QAAQ,CAAC;OACjB;;MAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;UACjC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;cAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;cACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;cAClB,OAAO,IAAI,CAAC;aACb;WACF;;UAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;UACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;UAEjB,OAAO,IAAI,CAAC;SACb,CAAC;;QAEF,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;OACzB;KACF;;;IAGD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;GAC7B;EACD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;;EAExB,SAAS,UAAU,GAAG;IACpB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;GACzC;;EAED,OAAO,CAAC,SAAS,GAAG;IAClB,WAAW,EAAE,OAAO;;IAEpB,KAAK,EAAE,SAAS,aAAa,EAAE;MAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;MACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;;MAGd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;MAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;MACrB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;;MAErB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;;MAEvC,IAAI,CAAC,aAAa,EAAE;QAClB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;;UAErB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;cACtB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;cACvB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;WACxB;SACF;OACF;KACF;;IAED,IAAI,EAAE,WAAW;MACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;MAEjB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;MACnC,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;MACtC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;QAC/B,MAAM,UAAU,CAAC,GAAG,CAAC;OACtB;;MAED,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;;IAED,iBAAiB,EAAE,SAAS,SAAS,EAAE;MACrC,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,MAAM,SAAS,CAAC;OACjB;;MAED,IAAI,OAAO,GAAG,IAAI,CAAC;MACnB,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;QAC3B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;;QAEnB,IAAI,MAAM,EAAE;;;UAGV,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;UACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;SACzB;;QAED,OAAO,CAAC,EAAE,MAAM,CAAC;OAClB;;MAED,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;;QAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;;;;UAI3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;SACtB;;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;UAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;UAC9C,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;;UAElD,IAAI,QAAQ,IAAI,UAAU,EAAE;YAC1B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;cAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACrC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;cACvC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACjC;;WAEF,MAAM,IAAI,QAAQ,EAAE;YACnB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;cAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACrC;;WAEF,MAAM,IAAI,UAAU,EAAE;YACrB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;cAChC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACjC;;WAEF,MAAM;YACL,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;WAC3D;SACF;OACF;KACF;;IAED,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,EAAE;MAC1B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;YAChC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;UAChC,IAAI,YAAY,GAAG,KAAK,CAAC;UACzB,MAAM;SACP;OACF;;MAED,IAAI,YAAY;WACX,IAAI,KAAK,OAAO;WAChB,IAAI,KAAK,UAAU,CAAC;UACrB,YAAY,CAAC,MAAM,IAAI,GAAG;UAC1B,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE;;;QAGlC,YAAY,GAAG,IAAI,CAAC;OACrB;;MAED,IAAI,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;MACzD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;MACnB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;;MAEjB,IAAI,YAAY,EAAE;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACpC,OAAO,gBAAgB,CAAC;OACzB;;MAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;;IAED,QAAQ,EAAE,SAAS,MAAM,EAAE,QAAQ,EAAE;MACnC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,MAAM,CAAC,GAAG,CAAC;OAClB;;MAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;UACvB,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;QAC9B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;OACxB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;OACnB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE;QAC/C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;OACtB;;MAED,OAAO,gBAAgB,CAAC;KACzB;;IAED,MAAM,EAAE,SAAS,UAAU,EAAE;MAC3B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;UACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;UAChD,aAAa,CAAC,KAAK,CAAC,CAAC;UACrB,OAAO,gBAAgB,CAAC;SACzB;OACF;KACF;;IAED,OAAO,EAAE,SAAS,MAAM,EAAE;MACxB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;UAC3B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;UAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;YACxB,aAAa,CAAC,KAAK,CAAC,CAAC;WACtB;UACD,OAAO,MAAM,CAAC;SACf;OACF;;;;MAID,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC1C;;IAED,aAAa,EAAE,SAAS,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;MACrD,IAAI,CAAC,QAAQ,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1B,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,OAAO;OACjB,CAAC;;MAEF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;;;QAG1B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;OACtB;;MAED,OAAO,gBAAgB,CAAC;KACzB;GACF,CAAC;CACH;;;;EAIC,OAAOhK,cAAM,KAAK,QAAQ,GAAGA,cAAM;EACnC,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM;EACnC,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAGiK,cAAI;CACvC,CAAC;;;AC/tBF;;;;;;AAMA,IAAI;IACA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,EAAE,CAAC,cAAc,EAAE,CAAC;IACpB,IAAI,EAAE,CAAC,gBAAgB,KAAK,IAAI,EAAE;;;QAG9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAChD;CACJ,CAAC,MAAM,CAAC,EAAE;EACT,IAAIC,aAAW,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE;IACxC,IAAI,GAAG,EAAE,WAAW,CAAC;IACrB,MAAM,GAAG,MAAM,IAAI;MACjB,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,KAAK;MACjB,MAAM,EAAE,SAAS;KAClB,CAAC;;IAEF,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC;IACjC,GAAG,CAAC,cAAc,GAAG,YAAY;MAC/B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI;QACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,EAAE;UAC9C,GAAG,EAAE,YAAY;YACf,OAAO,IAAI,CAAC;WACb;SACF,CAAC,CAAC;OACJ,CAAC,MAAM,CAAC,EAAE;QACT,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;OAC9B;KACF,CAAC;IACF,OAAO,GAAG,CAAC;GACZ,CAAC;;EAEFA,aAAW,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;EAC/C,MAAM,CAAC,WAAW,GAAGA,aAAW,CAAC;CAClC;;AC3CD,CAAC,SAAS,MAAM,EAAE;;;;;;;EAOhB,IAAI,0BAA0B,GAAG,WAAW;IAC1C,IAAI;MACF,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC1B,CAAC,MAAM,KAAK,EAAE;MACb,OAAO,KAAK,CAAC;KACd;GACF,CAAC;;;EAGF,IAAI,iBAAiB,GAAG,0BAA0B,EAAE,CAAC;;EAErD,IAAI,cAAc,GAAG,SAAS,KAAK,EAAE;IACnC,IAAI,QAAQ,GAAG;MACb,IAAI,EAAE,WAAW;QACf,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;OACjD;KACF,CAAC;;IAEF,GAAG,iBAAiB,EAAE;MACpB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW;QACrC,OAAO,QAAQ,CAAC;OACjB,CAAC;KACH;;IAED,OAAO,QAAQ,CAAC;GACjB,CAAC;;;;;;EAMF,IAAI,cAAc,GAAG,SAAS,KAAK,EAAE;IACnC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;GACvD,CAAC;;EAEF,IAAI,gBAAgB,GAAG,SAAS,KAAK,EAAE;IACrC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;GACtD,CAAC;;EAEF,IAAI,uBAAuB,EAAE,WAAW;;IAEtC,IAAI,eAAe,GAAG,SAAS,YAAY,EAAE;MAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;;MAEvD,GAAG,OAAO,YAAY,KAAK,QAAQ,EAAE;QACnC,GAAG,YAAY,KAAK,EAAE,EAAE;UACtB,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;UAC/C,IAAI,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;UACzC,IAAI,SAAS,CAAC;UACd,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM;cACT,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;cAC9B,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;aAC7D,CAAC;WACH;SACF;OACF,MAAM,GAAG,YAAY,YAAY,eAAe,EAAE;QACjD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;UACzC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC3B,CAAC,CAAC;OACJ;KACF,CAAC;;IAEF,IAAI,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC;;IAEtC,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;MACnC,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC5C,MAAM;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC1C;KACF,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;MAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;MACzB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KAChE,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;MAC5B,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACpE,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;MACzB,QAAQ,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;KAChC,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;MAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC1C,CAAC;;IAEF,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;MAC1C,IAAI,OAAO,CAAC;MACZ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QAC7B,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;UACrC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;UAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;WAChD;SACF;OACF;KACF,CAAC;;IAEF,KAAK,CAAC,IAAI,GAAG,WAAW;MACtB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MAC1D,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,WAAW;MACxB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MACrD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,KAAK,CAAC,OAAO,GAAG,WAAW;MACzB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MACnE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,GAAG,iBAAiB,EAAE;MACpB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;KACxC;;IAED,KAAK,CAAC,QAAQ,GAAG,WAAW;MAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;MACtB,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;QACjC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC;QAC/C,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;OACpE,CAAC,CAAC;MACH,OAAO,YAAY,CAAC;KACrB,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;GAC1C,CAAC;;EAEF,GAAG,EAAE,iBAAiB,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE;IACvF,uBAAuB,EAAE,CAAC;GAC3B;;;;CAIF;EACC,CAAC,OAAOlK,cAAM,KAAK,WAAW,IAAIA,cAAM;OACnC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM;OACxC,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,GAAGiK,cAAI,CAAC,CAAC;CACnD,CAAC;;AAEF,CAAC,SAAS,MAAM,EAAE;;;;;;;EAOhB,IAAI,qBAAqB,GAAG,WAAW;IACrC,IAAI;MACF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;MACjC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;MACrB,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,KAAK,CAAC,CAAC,YAAY,CAAC;KACxD,CAAC,MAAM,CAAC,EAAE;MACT,OAAO,KAAK,CAAC;KACd;GACF,CAAC;;;EAGF,IAAI,WAAW,GAAG,WAAW;IAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;;IAEtB,IAAI,GAAG,GAAG,SAAS,GAAG,EAAE,IAAI,EAAE;MAC5B,GAAG,OAAO,GAAG,KAAK,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;MAE9C,IAAI,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;MACzD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;MACjB,GAAG,IAAI,EAAE;QACP,IAAI,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;OACnC;;MAED,IAAI,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;MAC3C,aAAa,CAAC,IAAI,GAAG,GAAG,CAAC;MACzB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;MACpC,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;;MAExC,GAAG,aAAa,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;QAClE,MAAM,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;OACpC;;MAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE;QAC5C,KAAK,EAAE,aAAa;OACrB,CAAC,CAAC;KACJ,CAAC;;IAEF,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;;IAE1B,IAAI,0BAA0B,GAAG,SAAS,aAAa,EAAE;MACvD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE;QAC1C,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;SAC3C;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;SAC5C;QACD,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC;;IAEF,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;KACzD,OAAO,CAAC,SAAS,aAAa,EAAE;MAC/B,0BAA0B,CAAC,aAAa,CAAC,CAAC;KAC3C,CAAC,CAAC;;IAEH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;;MAE7B,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,IAAI,KAAK,GAAG,IAAI,CAAC;UACjB,OAAO,WAAW;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC;WACnB,CAAC;SACH;OACF;;MAED,MAAM,GAAG;QACP,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACnD;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,KAAK,CAAC;SAClC;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,GAAG;QACX,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC3D;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACtC;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,QAAQ,EAAE;QACR,GAAG,EAAE,WAAW;;UAEd,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;;;UAI1F,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,YAAY;YAC5D,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,GAAE;;UAEjC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ;YACjC,IAAI;YACJ,IAAI,CAAC,cAAc,CAAC,QAAQ;aAC3B,eAAe,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SAC7D;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,OAAO,EAAE,CAAC;SACX;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;SACpB;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,OAAO,EAAE,CAAC;SACX;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;SACpB;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,cAAc,EAAE;QACd,GAAG,EAAE,WAAW;UACd,IAAI,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC;UACjB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE;YACvD,IAAI,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,YAAY,CAAC,UAAU,CAAC,GAAG,WAAW;cACpC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;cACtC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;aACxC,CAAC;WACH,CAAC,CAAC;UACH,OAAO,YAAY,CAAC;SACrB;QACD,UAAU,EAAE,IAAI;OACjB;KACF,CAAC,CAAC;;IAEH,GAAG,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;MACnC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACpD,CAAC;;IAEF,GAAG,CAAC,eAAe,GAAG,SAAS,GAAG,EAAE;MAClC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACpD,CAAC;;IAEF,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;;GAElB,CAAC;;EAEF,GAAG,CAAC,qBAAqB,EAAE,EAAE;IAC3B,WAAW,EAAE,CAAC;GACf;;EAED,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;IACjE,IAAI,SAAS,GAAG,WAAW;MACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KAChI,CAAC;;IAEF,IAAI;MACF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE;QAC/C,GAAG,EAAE,SAAS;QACd,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC,MAAM,CAAC,EAAE;MACT,WAAW,CAAC,WAAW;QACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;OACtC,EAAE,GAAG,CAAC,CAAC;KACT;GACF;;CAEF;EACC,CAAC,OAAOjK,cAAM,KAAK,WAAW,IAAIA,cAAM;OACnC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM;OACxC,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,GAAGiK,cAAI,CAAC,CAAC;CACnD,CAAC;;;AC3VF,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;EACvB,IAAI,OAAOE,SAAM,KAAK,UAAU,IAAIA,SAAM,CAAC,GAAG,EAAE;IAC9CA,SAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;GACrB,MAAM,AAAiC;IACtC,cAAc,GAAG,OAAO,EAAE,CAAC;GAC5B,AAEA;CACF,CAACF,cAAI,EAAE,WAAW;;;;;;AAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;IACvB,aAAa,GAAG,EAAE;IAClB,iBAAiB,GAAG,EAAE;IACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;EAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;EAErD,IAAI,YAAY,GAAG,EAAE;MACjB,CAAC,GAAG,SAAS,CAAC,MAAM;MACpB,UAAU,GAAG,CAAC;MACd,EAAE;MACF,QAAQ;MACR,CAAC;MACD,CAAC,CAAC;;;EAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;IACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;IAEtD,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;GAC3C,CAAC;;;EAGF,OAAO,CAAC,EAAE,EAAE;IACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;IAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE;MACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;MAChB,SAAS;KACV;;;IAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACZ;CACF;;;;;;;;AAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;EAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;EAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;EAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;EAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;EAGf,OAAO,CAAC,CAAC,MAAM,EAAE;IACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GAChB;CACF;;;;;;;;AAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;EAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;EAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;OAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;CACtC;;;;;;;;AAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;EAClD,IAAI,GAAG,GAAG,QAAQ;MACd,KAAK,GAAG,IAAI,CAAC,KAAK;MAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;MACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;MACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;MAC9C,KAAK;MACL,CAAC,CAAC;;EAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;EAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC/B,KAAK,GAAG,IAAI,CAAC;;;IAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;IACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;GACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;IAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;GACtB,MAAM;;IAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;GAC9C;;EAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;IAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;MAC7B,IAAI;QACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;OAC3C,CAAC,OAAO,CAAC,EAAE;;;QAGV,MAAM,GAAG,GAAG,CAAC;OACd;KACF;;;IAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;MAEjB,QAAQ,IAAI,CAAC,CAAC;;;MAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;QACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;OACnD;KACF;;;IAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;GAC/C,CAAC;;;EAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAClE;;;;;;;;AAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;EAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;EAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;MACzB,CAAC,GAAG,UAAU;MACd,aAAa,GAAG,EAAE;MAClB,EAAE;MACF,CAAC,CAAC;;;EAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;IAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;IAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;MACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;WAC1C,OAAO;KACb;;IAED,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;GAC5C,CAAC;;;EAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;CACpD;;;;;;;;;;AAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,IAAI,QAAQ;MACR,IAAI,CAAC;;;EAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;EAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;EAGtC,IAAI,QAAQ,EAAE;IACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;MAC7B,MAAM,QAAQ,CAAC;KAChB,MAAM;MACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAChC;GACF;;;EAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;IAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;IAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;GAClC,EAAE,IAAI,CAAC,CAAC;CACV;;;;;;;;AAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;EAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;IAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;GACtC,CAAC,CAAC;;EAEH,OAAO,MAAM,CAAC;CACf,CAAC;;;;;;;AAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;EACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;CACvB,CAAC;;;;;;AAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;EAC9B,aAAa,GAAG,EAAE,CAAC;EACnB,iBAAiB,GAAG,EAAE,CAAC;EACvB,mBAAmB,GAAG,EAAE,CAAC;CAC1B,CAAC;;;;;;;AAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;EAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;CAClC,CAAC;;;;AAIF,OAAO,MAAM,CAAC;;CAEb,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpSJ;AACA;IAKMG;qBACUC,MAAZ,EAAoB;;;aACXC,OAAL,GAAeD,OAAOE,MAAP,CAAcC,OAAd,CAAsBF,OAArC;aACKG,GAAL,GAAWJ,OAAOE,MAAP,CAAcC,OAAd,CAAsBC,GAAjC;;;;;;;;4BAuBAA,KAAK;gBACD,CAACL,QAAQM,SAAT,IAAsB,CAAC,KAAKJ,OAAhC,EAAyC;uBAC9B,IAAP;;;gBAGEK,QAAQC,OAAOC,YAAP,CAAoBC,OAApB,CAA4B,KAAKL,GAAjC,CAAd;;gBAEIM,MAAMC,EAAN,CAASC,KAAT,CAAeN,KAAf,CAAJ,EAA2B;uBAChB,IAAP;;;gBAGEO,OAAOC,KAAKC,KAAL,CAAWT,KAAX,CAAb;;mBAEOI,MAAMC,EAAN,CAASK,MAAT,CAAgBZ,GAAhB,KAAwBA,IAAIa,MAA5B,GAAqCJ,KAAKT,GAAL,CAArC,GAAiDS,IAAxD;;;;4BAGAK,QAAQ;;gBAEJ,CAACnB,QAAQM,SAAT,IAAsB,CAAC,KAAKJ,OAAhC,EAAyC;;;;;gBAKrC,CAACS,MAAMC,EAAN,CAASO,MAAT,CAAgBA,MAAhB,CAAL,EAA8B;;;;;gBAK1Bf,UAAU,KAAKgB,GAAL,EAAd;;;gBAGIT,MAAMC,EAAN,CAASC,KAAT,CAAeT,OAAf,CAAJ,EAA6B;0BACf,EAAV;;;;kBAIEiB,MAAN,CAAajB,OAAb,EAAsBe,MAAtB;;;mBAGOV,YAAP,CAAoBa,OAApB,CAA4B,KAAKjB,GAAjC,EAAsCU,KAAKQ,SAAL,CAAenB,OAAf,CAAtC;;;;4BA1DmB;gBACf;oBACI,EAAE,kBAAkBI,MAApB,CAAJ,EAAiC;2BACtB,KAAP;;;oBAGEgB,OAAO,SAAb;;;;uBAIOf,YAAP,CAAoBa,OAApB,CAA4BE,IAA5B,EAAkCA,IAAlC;uBACOf,YAAP,CAAoBgB,UAApB,CAA+BD,IAA/B;;uBAEO,IAAP;aAZJ,CAaE,OAAOE,CAAP,EAAU;uBACD,KAAP;;;;;;;AC5BZ;;;;AAIA,AAAO,IAAMC,YAAY;WACd,OADc;aAEZ,SAFY;WAGd;CAHJ;;AAMP,AAAO,IAAMC,QAAQ;WACV,OADU;WAEV;CAFJ;;ACVP;AACA;AAQA,IAAMjB,QAAQ;;QAEN;cAAA,kBACOkB,KADP,EACc;mBACHlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCE,MAAvC;SAFJ;cAAA,kBAIOF,KAJP,EAIc;mBACHlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCG,MAAhC,IAA0C,CAACA,OAAOC,KAAP,CAAaJ,KAAb,CAAlD;SALJ;cAAA,kBAOOA,KAPP,EAOc;mBACHlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCK,MAAvC;SARJ;eAAA,mBAUQL,KAVR,EAUe;mBACJlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCM,OAAvC;SAXJ;gBAAA,qBAaSN,KAbT,EAagB;mBACLlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCO,QAAvC;SAdJ;aAAA,iBAgBMP,KAhBN,EAgBa;mBACF,CAAClB,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,IAAoCS,MAAMnK,OAAN,CAAc0J,KAAd,CAA3C;SAjBJ;eAAA,mBAmBQA,KAnBR,EAmBe;mBACJlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2BW,OAA3B,CAAP;SApBJ;gBAAA,oBAsBSX,KAtBT,EAsBgB;mBACLlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2BY,QAA3B,CAAP;SAvBJ;eAAA,mBAyBQZ,KAzBR,EAyBe;mBACJlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2Ba,OAA3B,CAAP;SA1BJ;gBAAA,oBA4BSb,KA5BT,EA4BgB;mBACLlB,MAAMmB,cAAN,CAAqBD,KAArB,MAAgCc,IAAvC;SA7BJ;aAAA,iBA+BMd,KA/BN,EA+Ba;mBACFlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2Be,KAA3B,CAAP;SAhCJ;WAAA,eAkCIf,KAlCJ,EAkCW;mBACAlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2BrB,OAAOqC,YAAlC,KAAmDlC,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2BrB,OAAOsC,MAAlC,CAA1D;SAnCJ;aAAA,iBAqCMjB,KArCN,EAqCa;mBACFlB,MAAMC,EAAN,CAAS2B,UAAT,CAAoBV,KAApB,EAA2BkB,SAA3B,KAA0C,CAACpC,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,IAAoClB,MAAMC,EAAN,CAASK,MAAT,CAAgBY,MAAMmB,IAAtB,CAArF;SAtCJ;WAAA,eAwCInB,KAxCJ,EAwCW;mBACA,CAAClB,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,IAAoC,mFAAmFL,IAAnF,CAAwFK,KAAxF,CAA3C;SAzCJ;uBAAA,2BA2CgBA,KA3ChB,EA2CuB;mBACZA,UAAU,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAA1C;SA5CJ;aAAA,iBA8CMA,KA9CN,EA8Ca;mBAELlB,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,KACC,CAAClB,MAAMC,EAAN,CAASK,MAAT,CAAgBY,KAAhB,KAA0BlB,MAAMC,EAAN,CAASqC,KAAT,CAAepB,KAAf,CAA1B,IAAmDlB,MAAMC,EAAN,CAASsC,QAAT,CAAkBrB,KAAlB,CAApD,KAAiF,CAACA,MAAMX,MADzF,IAECP,MAAMC,EAAN,CAASO,MAAT,CAAgBU,KAAhB,KAA0B,CAACE,OAAOoB,IAAP,CAAYtB,KAAZ,EAAmBX,MAHnD;SA/CJ;kBAAA,0BAqDWW,KArDX,EAqDkBuB,WArDlB,EAqD+B;mBACpBjB,QAAQN,SAASuB,WAAT,IAAwBvB,iBAAiBuB,WAAjD,CAAP;;KAxDE;;kBAAA,0BA4DKvB,KA5DL,EA4DY;eACX,CAAClB,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,GAAmCA,MAAMuB,WAAzC,GAAuD,IAA9D;KA7DM;;;;cAAA,wBAiEG;eACF;gCACkB,SAAS,CAAC,CAAClO,SAASmO,YADtC;sBAEO,sBAAsBnO,SAASoO,eAAT,CAAyBC,KAA/C,IAAwD,CAAC,OAAO/B,IAAP,CAAYnC,UAAUC,SAAtB,CAFhE;sBAGO,kBAAkBkC,IAAlB,CAAuBnC,UAAUmE,QAAjC,CAHP;mBAII,uBAAuBhC,IAAvB,CAA4BnC,UAAUmE,QAAtC;SAJX;KAlEM;;;;;SAAA,iBA4EJC,GA5EI,EA4EwB;YAAvBC,YAAuB,uEAAR,MAAQ;;eACvB,IAAI9G,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;gBAChC;oBACMC,UAAU,IAAIC,cAAJ,EAAhB;;;oBAGI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;;;;wBAI7BE,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;wBAC/BL,iBAAiB,MAArB,EAA6B;4BACrB;oCACQ3C,KAAKC,KAAL,CAAW6C,QAAQG,YAAnB,CAAR;yBADJ,CAEE,OAAOtC,CAAP,EAAU;oCACAmC,QAAQG,YAAhB;;qBAJR,MAMO;gCACKH,QAAQI,QAAhB;;iBARR;;wBAYQF,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;0BAC9B,IAAIG,KAAJ,CAAUL,QAAQM,UAAlB,CAAN;iBADJ;;wBAIQC,IAAR,CAAa,KAAb,EAAoBX,GAApB,EAAyB,IAAzB;;;wBAGQC,YAAR,GAAuBA,YAAvB;;wBAEQW,IAAR;aA7BJ,CA8BE,OAAO3C,CAAP,EAAU;uBACDA,CAAP;;SAhCD,CAAP;KA7EM;;;;;;aAAA,qBAqHA4C,GArHA,EAqHmB;YAAdC,QAAc,uEAAH,CAAG;;eAClB,IAAI3H,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;gBAC9BY,QAAQ,IAAIC,KAAJ,EAAd;gBACMC,UAAU,SAAVA,OAAU,GAAM;uBACXF,MAAMG,MAAb;uBACOH,MAAMI,OAAb;iBACCJ,MAAMK,YAAN,IAAsBN,QAAtB,GAAiCZ,OAAjC,GAA2CC,MAA5C,EAAoDY,KAApD;aAHJ;mBAKOvI,MAAP,CAAcuI,KAAd,EAAqB,EAACG,QAAQD,OAAT,EAAkBE,SAASF,OAA3B,EAAoCJ,QAApC,EAArB;SAPG,CAAP;KAtHM;;;;cAAA,sBAkICb,GAlID,EAkIM;eACL,IAAI7G,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;uBAC7BH,GAAP,EAAY;yBACCE,OADD;uBAEDC;aAFX;SADG,CAAP;KAnIM;;;;cAAA,sBA4ICH,GA5ID,EA4IM3H,EA5IN,EA4IU;YACZ,CAAC6E,MAAMC,EAAN,CAASK,MAAT,CAAgBwC,GAAhB,CAAL,EAA2B;;;;YAIrBqB,SAAS,OAAf;YACMC,QAAQpE,MAAMC,EAAN,CAASK,MAAT,CAAgBnF,EAAhB,CAAd;YACIkJ,WAAW,KAAf;;YAEMC,SAAS,SAATA,MAAS;mBAAM/P,SAASgQ,cAAT,CAAwBpJ,EAAxB,MAAgC,IAAtC;SAAf;;YAEMqJ,SAAS,SAATA,MAAS,CAACC,SAAD,EAAYC,IAAZ,EAAqB;sBACtBC,SAAV,GAAsBD,IAAtB;;;gBAGIN,SAASE,QAAb,EAAuB;;;;;qBAKdM,IAAT,CAAcC,qBAAd,CAAoC,YAApC,EAAkDJ,SAAlD;SATJ;;;YAaI,CAACL,KAAD,IAAU,CAACE,QAAf,EAAyB;gBACfQ,aAAazF,QAAQM,SAA3B;;;gBAGM8E,YAAYlQ,SAASwQ,aAAT,CAAuB,KAAvB,CAAlB;kBACMC,YAAN,CAAmBP,SAAnB,EAA8B,IAA9B;;gBAEIL,KAAJ,EAAW;0BACGa,YAAV,CAAuB,IAAvB,EAA6B9J,EAA7B;;;;gBAIA2J,UAAJ,EAAgB;oBACNI,SAASrF,OAAOC,YAAP,CAAoBC,OAApB,CAA+BoE,MAA/B,SAAyChJ,EAAzC,CAAf;2BACW+J,WAAW,IAAtB;;oBAEIb,QAAJ,EAAc;wBACJK,OAAOtE,KAAKC,KAAL,CAAW6E,MAAX,CAAb;2BACOT,SAAP,EAAkBC,KAAKS,OAAvB;;;;;kBAMHC,KADL,CACWtC,GADX,EAEKuC,IAFL,CAEU,kBAAU;oBACRrF,MAAMC,EAAN,CAASC,KAAT,CAAeoF,MAAf,CAAJ,EAA4B;;;;oBAIxBR,UAAJ,EAAgB;2BACLhF,YAAP,CAAoBa,OAApB,CACOwD,MADP,SACiBhJ,EADjB,EAEIiF,KAAKQ,SAAL,CAAe;iCACF0E;qBADb,CAFJ;;;uBAQGb,SAAP,EAAkBa,MAAlB;aAhBR,EAkBKC,KAlBL,CAkBW,YAAM,EAlBjB;;KA3LE;;;;cAAA,sBAkNCpB,MAlND,EAkNS;eACLA,MAAV,SAAoBqB,KAAKzH,KAAL,CAAWyH,KAAKC,MAAL,KAAgB,KAA3B,CAApB;KAnNM;;;;QAAA,gBAuNLC,QAvNK,EAuNKC,OAvNL,EAuNc;;YAEdC,UAAUF,SAASnF,MAAT,GAAkBmF,QAAlB,GAA6B,CAACA,QAAD,CAA7C;;;;cAIMG,IAAN,CAAWD,OAAX,EACKE,OADL,GAEKC,OAFL,CAEa,UAACC,OAAD,EAAUC,KAAV,EAAoB;gBACnBC,QAAQD,QAAQ,CAAR,GAAYN,QAAQQ,SAAR,CAAkB,IAAlB,CAAZ,GAAsCR,OAApD;;;gBAGMS,SAASJ,QAAQK,UAAvB;gBACMC,UAAUN,QAAQO,WAAxB;;;;kBAIMC,WAAN,CAAkBR,OAAlB;;;;;gBAKIM,OAAJ,EAAa;uBACFG,YAAP,CAAoBP,KAApB,EAA2BI,OAA3B;aADJ,MAEO;uBACIE,WAAP,CAAmBN,KAAnB;;SAnBZ;KA7NM;;;;iBAAA,yBAsPIQ,IAtPJ,EAsPUC,UAtPV,EAsPsBC,IAtPtB,EAsP4B;;YAE5BZ,UAAUzR,SAASwQ,aAAT,CAAuB2B,IAAvB,CAAhB;;;YAGI1G,MAAMC,EAAN,CAASO,MAAT,CAAgBmG,UAAhB,CAAJ,EAAiC;kBACvBE,aAAN,CAAoBb,OAApB,EAA6BW,UAA7B;;;;YAIA3G,MAAMC,EAAN,CAASK,MAAT,CAAgBsG,IAAhB,CAAJ,EAA2B;oBACfE,SAAR,GAAoBF,IAApB;;;;eAIGZ,OAAP;KArQM;;;;eAAA,uBAyQEA,OAzQF,EAyQWe,MAzQX,EAyQmB;eAClBV,UAAP,CAAkBI,YAAlB,CAA+BT,OAA/B,EAAwCe,OAAOR,WAA/C;KA1QM;;;;iBAAA,yBA8QIG,IA9QJ,EA8QUN,MA9QV,EA8QkBO,UA9QlB,EA8Q8BC,IA9Q9B,EA8QoC;;eAEnCJ,WAAP,CAAmBxG,MAAM+E,aAAN,CAAoB2B,IAApB,EAA0BC,UAA1B,EAAsCC,IAAtC,CAAnB;KAhRM;;;;iBAAA,yBAoRIZ,OApRJ,EAoRa;YACfhG,MAAMC,EAAN,CAASsC,QAAT,CAAkByD,OAAlB,KAA8BhG,MAAMC,EAAN,CAASqC,KAAT,CAAe0D,OAAf,CAAlC,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4B/F,MAAMgH,aAAlC;;;;YAIA,CAAChH,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAD,IAA8B,CAAChG,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,QAAQK,UAAzB,CAAnC,EAAyE;;;;gBAIjEA,UAAR,CAAmBY,WAAnB,CAA+BjB,OAA/B;KA9RM;;;;gBAAA,wBAkSGA,OAlSH,EAkSY;YACZzF,MADY,GACDyF,QAAQkB,UADP,CACZ3G,MADY;;;eAGXA,SAAS,CAAhB,EAAmB;oBACP0G,WAAR,CAAoBjB,QAAQmB,SAA5B;sBACU,CAAV;;KAvSE;;;;kBAAA,0BA4SKC,QA5SL,EA4SeC,QA5Sf,EA4SyB;YAC3B,CAACrH,MAAMC,EAAN,CAAS+F,OAAT,CAAiBqB,QAAjB,CAAD,IAA+B,CAACrH,MAAMC,EAAN,CAAS+F,OAAT,CAAiBqB,SAAShB,UAA1B,CAAhC,IAAyE,CAACrG,MAAMC,EAAN,CAAS+F,OAAT,CAAiBoB,QAAjB,CAA9E,EAA0G;mBAC/F,IAAP;;;iBAGKf,UAAT,CAAoBiB,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;;eAEOD,QAAP;KAnTM;;;;iBAAA,yBAuTIpB,OAvTJ,EAuTaW,UAvTb,EAuTyB;YAC3B,CAAC3G,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAD,IAA8BhG,MAAMC,EAAN,CAASC,KAAT,CAAeyG,UAAf,CAAlC,EAA8D;;;;eAIvDY,OAAP,CAAeZ,UAAf,EAA2BZ,OAA3B,CAAmC,gBAG7B;;gBAFFrG,GAEE;gBADF8H,KACE;;oBACMvC,YAAR,CAAqBvF,GAArB,EAA0B8H,KAA1B;SAJJ;KA5TM;;;;6BAAA,qCAqUgBC,GArUhB,EAqUqBC,kBArUrB,EAqUyC;;;;;;YAM3C,CAAC1H,MAAMC,EAAN,CAASK,MAAT,CAAgBmH,GAAhB,CAAD,IAAyBzH,MAAMC,EAAN,CAASC,KAAT,CAAeuH,GAAf,CAA7B,EAAkD;mBACvC,EAAP;;;YAGEd,aAAa,EAAnB;YACMgB,WAAWD,kBAAjB;;YAEIE,KAAJ,CAAU,GAAV,EAAe7B,OAAf,CAAuB,aAAK;;gBAElB8B,WAAWC,EAAEC,IAAF,EAAjB;gBACMC,YAAYH,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;gBACMC,WAAWL,SAASI,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB;;;gBAGME,QAAQD,SAASN,KAAT,CAAe,GAAf,CAAd;gBACMlI,MAAMyI,MAAM,CAAN,CAAZ;gBACMX,QAAQW,MAAM5H,MAAN,GAAe,CAAf,GAAmB4H,MAAM,CAAN,EAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE;;;gBAGMG,QAAQP,SAASQ,MAAT,CAAgB,CAAhB,CAAd;;oBAEQD,KAAR;qBACS,GAAL;;wBAEQpI,MAAMC,EAAN,CAASO,MAAT,CAAgBmH,QAAhB,KAA6B3H,MAAMC,EAAN,CAASK,MAAT,CAAgBqH,SAASW,KAAzB,CAAjC,EAAkE;iCACrDA,KAAT,UAAsBN,SAAtB;;;+BAGOM,KAAX,GAAmBN,SAAnB;;;qBAGC,GAAL;;+BAEe7M,EAAX,GAAgB0M,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;;;qBAGC,GAAL;;+BAEevI,GAAX,IAAkB8H,KAAlB;;;;;;;SA/BZ;;eAwCOb,UAAP;KA1XM;;;;gBAAA,wBA8XGX,OA9XH,EA8XYuC,MA9XZ,EA8XoB;YACtB,CAACvI,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI5BhR,OAAOuT,MAAX;;YAEI,CAACvI,MAAMC,EAAN,CAASuI,OAAT,CAAiBxT,IAAjB,CAAL,EAA6B;mBAClB,CAACgR,QAAQyC,YAAR,CAAqB,QAArB,CAAR;;;YAGAzT,IAAJ,EAAU;oBACEiQ,YAAR,CAAqB,QAArB,EAA+B,EAA/B;SADJ,MAEO;oBACKyD,eAAR,CAAwB,QAAxB;;KA5YE;;;;eAAA,uBAiZE1C,OAjZF,EAiZWgC,SAjZX,EAiZsBW,KAjZtB,EAiZ6B;YAC/B3I,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAJ,EAA+B;gBACvB4C,SAAS,QAAb;gBACI,OAAOD,KAAP,KAAiB,WAArB,EAAkC;yBACrBA,QAAQ,KAAR,GAAgB,QAAzB;;;oBAGIE,SAAR,CAAkBD,MAAlB,EAA0BZ,SAA1B;mBACOhC,QAAQ6C,SAAR,CAAkBC,QAAlB,CAA2Bd,SAA3B,CAAP;;;eAGG,IAAP;KA5ZM;;;;YAAA,oBAgaDhC,OAhaC,EAgaQgC,SAhaR,EAgamB;eAClBhI,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,KAA6BA,QAAQ6C,SAAR,CAAkBC,QAAlB,CAA2Bd,SAA3B,CAApC;KAjaM;;;;WAAA,mBAqaFhC,OAraE,EAqaO6B,QAraP,EAqaiB;YACjBkB,YAAY,EAAEhH,gBAAF,EAAlB;;iBAESiH,KAAT,GAAiB;mBACNrH,MAAMkE,IAAN,CAAWtR,SAAS0U,gBAAT,CAA0BpB,QAA1B,CAAX,EAAgDqB,QAAhD,CAAyD,IAAzD,CAAP;;;YAGEC,UAAUJ,UAAUI,OAAV,IAAqBJ,UAAUK,qBAA/B,IAAwDL,UAAUM,kBAAlE,IAAwFN,UAAUO,iBAAlG,IAAuHN,KAAvI;;eAEOG,QAAQ3O,IAAR,CAAawL,OAAb,EAAsB6B,QAAtB,CAAP;KA9aM;;;;eAAA,uBAkbEA,QAlbF,EAkbY;eACX,KAAKnC,QAAL,CAAcjB,SAAd,CAAwBwE,gBAAxB,CAAyCpB,QAAzC,CAAP;KAnbM;;;;cAAA,sBAubCA,QAvbD,EAubW;eACV,KAAKnC,QAAL,CAAcjB,SAAd,CAAwB8E,aAAxB,CAAsC1B,QAAtC,CAAP;KAxbM;;;;mBAAA,6BA4bQ;YACV2B,UAAUjV,SAASkV,aAAvB;;YAEI,CAACD,OAAD,IAAYA,YAAYjV,SAASqQ,IAArC,EAA2C;sBAC7B,IAAV;SADJ,MAEO;sBACOrQ,SAASgV,aAAT,CAAuB,QAAvB,CAAV;;;eAGGC,OAAP;KArcM;;;;aAAA,uBAycgC;YAAhCxD,OAAgC,uEAAtB,IAAsB;YAAhB0D,MAAgB,uEAAP,KAAO;;YAClC,CAAC1J,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI1B2D,YAAY3J,MAAM4J,WAAN,CAAkBpP,IAAlB,CAAuB,IAAvB,EAA6B,yDAA7B,CAAlB;YACMqP,QAAQF,UAAU,CAAV,CAAd;YACMG,OAAOH,UAAUA,UAAUpJ,MAAV,GAAmB,CAA7B,CAAb;;YAEMwJ,OAAO,SAAPA,IAAO,QAAS;;gBAEdC,MAAMtK,GAAN,KAAc,KAAd,IAAuBsK,MAAMC,OAAN,KAAkB,CAA7C,EAAgD;;;;;gBAK1CT,UAAUxJ,MAAMkK,eAAN,EAAhB;;gBAEIV,YAAYM,IAAZ,IAAoB,CAACE,MAAMG,QAA/B,EAAyC;;sBAE/BC,KAAN;sBACMC,cAAN;aAHJ,MAIO,IAAIb,YAAYK,KAAZ,IAAqBG,MAAMG,QAA/B,EAAyC;;qBAEvCC,KAAL;sBACMC,cAAN;;SAhBR;;YAoBIX,MAAJ,EAAY;kBACFY,EAAN,CAAS,KAAK5E,QAAL,CAAcjB,SAAvB,EAAkC,SAAlC,EAA6CsF,IAA7C,EAAmD,KAAnD;SADJ,MAEO;kBACGQ,GAAN,CAAU,KAAK7E,QAAL,CAAcjB,SAAxB,EAAmC,SAAnC,EAA8CsF,IAA9C,EAAoD,KAApD;;KAzeE;;;;kBAAA,0BA8eKrE,QA9eL,EA8eesE,KA9ef,EA8esBQ,QA9etB,EA8eiF;YAAjDd,MAAiD,uEAAxC,KAAwC;YAAjCe,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;;YAEnF1K,MAAMC,EAAN,CAASC,KAAT,CAAewF,QAAf,KAA4B1F,MAAMC,EAAN,CAASC,KAAT,CAAe8J,KAAf,CAA5B,IAAqD,CAAChK,MAAMC,EAAN,CAAS0K,QAAT,CAAkBH,QAAlB,CAA1D,EAAuF;;;;;YAKnFxK,MAAMC,EAAN,CAASsC,QAAT,CAAkBmD,QAAlB,KAA+B1F,MAAMC,EAAN,CAASqC,KAAT,CAAeoD,QAAf,CAAnC,EAA6D;;kBAEnDG,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,mBAAW;oBAChCC,mBAAmB4E,IAAvB,EAA6B;0BACnBC,cAAN,CAAqBrQ,IAArB,CAA0B,IAA1B,EAAgCwL,OAAhC,EAAyCgE,KAAzC,EAAgDQ,QAAhD,EAA0Dd,MAA1D,EAAkEe,OAAlE,EAA2EC,OAA3E;;aAFR;;;;;;YAUEI,SAASd,MAAMpC,KAAN,CAAY,GAAZ,CAAf;;;;YAIImD,UAAUL,OAAd;;;YAGIM,QAAQC,gBAAZ,EAA8B;sBAChB;;gCAAA;;;aAAV;;;;eASGlF,OAAP,CAAe,gBAAQ;qBACV2D,SAAS,kBAAT,GAA8B,qBAAvC,EAA8DhD,IAA9D,EAAoE8D,QAApE,EAA8EO,OAA9E;SADJ;KAlhBM;;;;MAAA,cAwhBP/E,OAxhBO,EAwhB0D;YAAxD8E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC1DG,cAAN,CAAqB7E,OAArB,EAA8B8E,MAA9B,EAAsCN,QAAtC,EAAgD,IAAhD,EAAsDC,OAAtD,EAA+DC,OAA/D;KAzhBM;;;;OAAA,eA6hBN1E,OA7hBM,EA6hB2D;YAAxD8E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC3DG,cAAN,CAAqB7E,OAArB,EAA8B8E,MAA9B,EAAsCN,QAAtC,EAAgD,KAAhD,EAAuDC,OAAvD,EAAgEC,OAAhE;KA9hBM;;;;iBAAA,yBAkiBI1E,OAliBJ,EAkiBsD;YAAzCU,IAAyC,uEAAlC,EAAkC;YAA9BwE,OAA8B,uEAApB,KAAoB;YAAbC,MAAa,uEAAJ,EAAI;;;YAExD,CAACnL,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAD,IAA8BhG,MAAMC,EAAN,CAASC,KAAT,CAAewG,IAAf,CAAlC,EAAwD;;;;;YAKlDsD,QAAQ,IAAI7K,WAAJ,CAAgBuH,IAAhB,EAAsB;4BAAA;oBAExBtF,OAAO9F,MAAP,CAAc,EAAd,EAAkB6P,MAAlB,EAA0B;sBACxB;aADF;SAFE,CAAd;;;gBAQQC,aAAR,CAAsBpB,KAAtB;KAjjBM;;;;;eAAA,uBAsjBEhE,OAtjBF,EAsjBW9E,KAtjBX,EAsjBkB;;YAEpBlB,MAAMC,EAAN,CAASqC,KAAT,CAAe0D,OAAf,KAA2BhG,MAAMC,EAAN,CAASsC,QAAT,CAAkByD,OAAlB,CAA/B,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4B;uBAAU/F,MAAMqL,WAAN,CAAkBtE,MAAlB,EAA0B7F,KAA1B,CAAV;aAA5B;;;;;YAKA,CAAClB,MAAMC,EAAN,CAAS+F,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;;YAK1BsF,UAAUtF,QAAQuF,YAAR,CAAqB,cAArB,MAAyC,MAAzD;YACMC,QAAQxL,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,CAACoK,OAAjD;;;gBAGQrG,YAAR,CAAqB,cAArB,EAAqCuG,KAArC;KAvkBM;;;;UAAA,kBA2kBHtK,KA3kBG,EA2kBa;0CAANuK,IAAM;gBAAA;;;YACfzL,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAJ,EAA2B;mBAChBA,KAAP;;;eAGGA,MAAMzE,QAAN,GAAiBwL,OAAjB,CAAyB,UAAzB,EAAqC,UAACe,KAAD,EAAQjK,CAAR;mBAAeiB,MAAMC,EAAN,CAASK,MAAT,CAAgBmL,KAAK1M,CAAL,CAAhB,IAA2B0M,KAAK1M,CAAL,CAA3B,GAAqC,EAApD;SAArC,CAAP;KAhlBM;;;;iBAAA,yBAolBI2M,OAplBJ,EAolBaC,GAplBb,EAolBkB;YACpBD,YAAY,CAAZ,IAAiBC,QAAQ,CAAzB,IAA8BtK,OAAOC,KAAP,CAAaoK,OAAb,CAA9B,IAAuDrK,OAAOC,KAAP,CAAaqK,GAAb,CAA3D,EAA8E;mBACnE,CAAP;;;eAGG,CAACD,UAAUC,GAAV,GAAgB,GAAjB,EAAsBC,OAAtB,CAA8B,CAA9B,CAAP;KAzlBM;;;;YAAA,oBA6lBDpE,KA7lBC,EA6lBM;eACLqE,SAAUrE,QAAQ,EAAR,GAAa,EAAd,GAAoB,EAA7B,EAAiC,EAAjC,CAAP;KA9lBM;cAAA,sBAgmBCA,KAhmBD,EAgmBQ;eACPqE,SAAUrE,QAAQ,EAAT,GAAe,EAAxB,EAA4B,EAA5B,CAAP;KAjmBM;cAAA,sBAmmBCA,KAnmBD,EAmmBQ;eACPqE,SAASrE,QAAQ,EAAjB,EAAqB,EAArB,CAAP;KApmBM;;;;cAAA,wBAwmBmD;YAAlDsE,IAAkD,uEAA3C,CAA2C;YAAxCC,YAAwC,uEAAzB,KAAyB;YAAlBC,QAAkB,uEAAP,KAAO;;;YAErD,CAAChM,MAAMC,EAAN,CAASgM,MAAT,CAAgBH,IAAhB,CAAL,EAA4B;mBACjB9L,MAAMkM,UAAN,CAAiB,IAAjB,EAAuBH,YAAvB,EAAqCC,QAArC,CAAP;;;;YAIEG,SAAS,SAATA,MAAS;mBAAS,OAAI3E,KAAJ,EAAY4E,KAAZ,CAAkB,CAAC,CAAnB,CAAT;SAAf;;;YAGIC,QAAQrM,MAAMsM,QAAN,CAAeR,IAAf,CAAZ;YACMS,OAAOvM,MAAMwM,UAAN,CAAiBV,IAAjB,CAAb;YACMW,OAAOzM,MAAM0M,UAAN,CAAiBZ,IAAjB,CAAb;;;YAGIC,gBAAgBM,QAAQ,CAA5B,EAA+B;oBAChBA,KAAX;SADJ,MAEO;oBACK,EAAR;;;;qBAIML,WAAW,GAAX,GAAiB,EAA3B,IAAgCK,KAAhC,GAAwCF,OAAOI,IAAP,CAAxC,SAAwDJ,OAAOM,IAAP,CAAxD;KA9nBM;;;;cAAA,wBAkoBsC;YAArCvL,KAAqC,uEAA7B,EAA6B;YAAzByL,IAAyB,uEAAlB,EAAkB;YAAd1E,OAAc,uEAAJ,EAAI;;eACrC/G,MAAM+G,OAAN,CAAc,IAAI2E,MAAJ,CAAWD,KAAKlQ,QAAL,GAAgBwL,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CAAd,EAA6FA,QAAQxL,QAAR,EAA7F,CAAP;KAnoBM;;;;eAAA,yBAuoBc;YAAZyE,KAAY,uEAAJ,EAAI;;eACbA,MAAMzE,QAAN,GAAiBwL,OAAjB,CAAyB,QAAzB,EAAmC;mBAAQrB,KAAKyB,MAAL,CAAY,CAAZ,EAAewE,WAAf,KAA+BjG,KAAKkG,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAvC;SAAnC,CAAP;KAxoBM;;;;gBAAA,0BA4oBe;YAAZ7L,KAAY,uEAAJ,EAAI;;YACjBZ,SAASY,MAAMzE,QAAN,EAAb;;;iBAGSuD,MAAMgN,UAAN,CAAiB1M,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSN,MAAMgN,UAAN,CAAiB1M,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSN,MAAMiN,WAAN,CAAkB3M,MAAlB,CAAT;;;eAGON,MAAMgN,UAAN,CAAiB1M,MAAjB,EAAyB,GAAzB,EAA8B,EAA9B,CAAP;KAzpBM;;;;eAAA,yBA6pBc;YAAZY,KAAY,uEAAJ,EAAI;;YAChBZ,SAASY,MAAMzE,QAAN,EAAb;;;iBAGSuD,MAAMkN,YAAN,CAAmB5M,MAAnB,CAAT;;;eAGOA,OAAO+H,MAAP,CAAc,CAAd,EAAiB0E,WAAjB,KAAiCzM,OAAO8L,KAAP,CAAa,CAAb,CAAxC;KApqBM;;;;UAAA,oBAwqBsB;YAAzBrF,MAAyB,uEAAhB,EAAgB;;2CAAToG,OAAS;mBAAA;;;YACxB,CAACA,QAAQ5M,MAAb,EAAqB;mBACVwG,MAAP;;;YAGEqG,SAASD,QAAQE,KAAR,EAAf;;YAEI,CAACrN,MAAMC,EAAN,CAASO,MAAT,CAAgB4M,MAAhB,CAAL,EAA8B;mBACnBrG,MAAP;;;eAGGvE,IAAP,CAAY4K,MAAZ,EAAoBrH,OAApB,CAA4B,eAAO;gBAC3B/F,MAAMC,EAAN,CAASO,MAAT,CAAgB4M,OAAO1N,GAAP,CAAhB,CAAJ,EAAkC;oBAC1B,CAAC0B,OAAOoB,IAAP,CAAYuE,MAAZ,EAAoBmC,QAApB,CAA6BxJ,GAA7B,CAAL,EAAwC;2BAC7BpE,MAAP,CAAcyL,MAAd,uBAAyBrH,GAAzB,EAA+B,EAA/B;;;sBAGEgB,MAAN,CAAaqG,OAAOrH,GAAP,CAAb,EAA0B0N,OAAO1N,GAAP,CAA1B;aALJ,MAMO;uBACIpE,MAAP,CAAcyL,MAAd,uBAAyBrH,GAAzB,EAA+B0N,OAAO1N,GAAP,CAA/B;;SARR;;eAYOM,MAAMU,MAAN,eAAaqG,MAAb,2BAAwBoG,OAAxB,GAAP;KA/rBM;;;;UAAA,kBAmsBH7K,KAnsBG,EAmsBI;YACN,CAACtC,MAAMC,EAAN,CAASqC,KAAT,CAAeA,KAAf,CAAL,EAA4B;mBACjBA,KAAP;;;eAGGA,MAAMgL,MAAN,CAAa,UAACC,IAAD,EAAOtH,KAAP;mBAAiB3D,MAAMkL,OAAN,CAAcD,IAAd,MAAwBtH,KAAzC;SAAb,CAAP;KAxsBM;;;;aAAA,qBA4sBAzF,MA5sBA,EA4sBQ;eACPJ,KAAKC,KAAL,CAAWD,KAAKQ,SAAL,CAAeJ,MAAf,CAAX,CAAP;KA7sBM;;;;WAAA,mBAitBFA,MAjtBE,EAitBMiN,IAjtBN,EAitBY;eACXA,KAAK7F,KAAL,CAAW,GAAX,EAAgB8F,MAAhB,CAAuB,UAACC,GAAD,EAAMjO,GAAN;mBAAciO,OAAOA,IAAIjO,GAAJ,CAArB;SAAvB,EAAsDc,MAAtD,CAAP;KAltBM;;;;WAAA,mBAstBF8B,KAttBE,EAstBKkF,KAttBL,EAstBY;YACd,CAACxH,MAAMC,EAAN,CAASqC,KAAT,CAAeA,KAAf,CAAD,IAA0B,CAACA,MAAM/B,MAArC,EAA6C;mBAClC,IAAP;;;eAGG+B,MAAMoL,MAAN,CAAa,UAACE,IAAD,EAAOC,IAAP;mBAAiBrI,KAAKpH,GAAL,CAASyP,OAAOrG,KAAhB,IAAyBhC,KAAKpH,GAAL,CAASwP,OAAOpG,KAAhB,CAAzB,GAAkDqG,IAAlD,GAAyDD,IAA1E;SAAb,CAAP;KA3tBM;;;;oBAAA,4BA+tBO9K,GA/tBP,EA+tBY;;YAEd,wDAAwDjC,IAAxD,CAA6DiC,GAA7D,CAAJ,EAAuE;mBAC5D9B,UAAU8M,OAAjB;;;;YAIA,wDAAwDjN,IAAxD,CAA6DiC,GAA7D,CAAJ,EAAuE;mBAC5D9B,UAAU+M,KAAjB;;;eAGG,IAAP;KA1uBM;;;;kBAAA,0BA8uBKjL,GA9uBL,EA8uBU;YACZ9C,MAAMC,EAAN,CAASC,KAAT,CAAe4C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGEkL,QAAQ,8DAAd;eACOlL,IAAIkG,KAAJ,CAAUgF,KAAV,IAAmBpB,OAAOqB,EAA1B,GAA+BnL,GAAtC;KApvBM;;;;gBAAA,wBAwvBGA,GAxvBH,EAwvBQ;YACV9C,MAAMC,EAAN,CAASC,KAAT,CAAe4C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGA9C,MAAMC,EAAN,CAASgM,MAAT,CAAgB5K,OAAOyB,GAAP,CAAhB,CAAJ,EAAkC;mBACvBA,GAAP;;;YAGEkL,QAAQ,iCAAd;eACOlL,IAAIkG,KAAJ,CAAUgF,KAAV,IAAmBpB,OAAOqB,EAA1B,GAA+BnL,GAAtC;KAlwBM;;;;YAAA,oBAswBDA,GAtwBC,EAswBI;YACJoL,SAAS3Z,SAASwQ,aAAT,CAAuB,GAAvB,CAAf;eACOoJ,IAAP,GAAcrL,GAAd;eACOoL,MAAP;KAzwBM;;;;gBAAA,wBA6wBGhN,KA7wBH,EA6wBU;YACZkN,SAASlN,KAAb;;;YAGIA,MAAMmN,UAAN,CAAiB,SAAjB,KAA+BnN,MAAMmN,UAAN,CAAiB,UAAjB,CAAnC,EAAiE;kCAC/CrO,MAAMsO,QAAN,CAAepN,KAAf,CAD+C;;kBAAA,mBAC1DkN,MAD0D;;;YAI7DpO,MAAMC,EAAN,CAASC,KAAT,CAAekO,MAAf,CAAJ,EAA4B;mBACjB,IAAP;;;YAGEG,SAASH,OAAOhC,KAAP,CAAagC,OAAOZ,OAAP,CAAe,GAAf,IAAsB,CAAnC,EAAsC5F,KAAtC,CAA4C,GAA5C,CAAf;;eAEO2G,OAAOb,MAAP,CAAc,UAACc,MAAD,EAASC,IAAT,EAAkB;8BAI/BA,KAAK7G,KAAL,CAAW,GAAX,CAJ+B;;gBAE/BlI,GAF+B;gBAG/BgP,GAH+B;;mBAM5BtN,OAAO9F,MAAP,CAAckT,MAAd,uBAAyB9O,GAAzB,EAA+BiP,mBAAmBD,GAAnB,CAA/B,EAAP;SANG,EAOJ,EAPI,CAAP;KA3xBM;;;;kBAAA,0BAsyBKxN,KAtyBL,EAsyBY;YACd,CAAClB,MAAMC,EAAN,CAASO,MAAT,CAAgBU,KAAhB,CAAL,EAA6B;mBAClB,EAAP;;;eAGGE,OAAOoB,IAAP,CAAYtB,KAAZ,EACF0N,GADE,CACE;mBAAUC,mBAAmBnP,GAAnB,CAAV,SAAqCmP,mBAAmB3N,MAAMxB,GAAN,CAAnB,CAArC;SADF,EAEFoP,IAFE,CAEG,GAFH,CAAP;KA3yBM;;;;aAAA,qBAizBA1B,MAjzBA,EAizBQ;YACR2B,WAAWxa,SAASya,sBAAT,EAAjB;YACMhJ,UAAUzR,SAASwQ,aAAT,CAAuB,KAAvB,CAAhB;iBACSyB,WAAT,CAAqBR,OAArB;gBACQrB,SAAR,GAAoByI,MAApB;eACO2B,SAASE,UAAT,CAAoBnI,SAA3B;KAtzBM;;;;WAAA,mBA0zBFd,OA1zBE,EA0zBO;YACPL,UAAUpR,SAASwQ,aAAT,CAAuB,KAAvB,CAAhB;gBACQyB,WAAR,CAAoBR,OAApB;eACOL,QAAQhB,SAAf;KA7zBM;;;;kBAAA,0BAi0BKuK,KAj0BL,EAi0BYC,MAj0BZ,EAi0BoB;YACpBC,WAAW,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;mBAAWA,MAAM,CAAN,GAAUD,CAAV,GAAcD,SAASE,CAAT,EAAYD,IAAIC,CAAhB,CAAzB;SAAjB;YACMC,QAAQH,SAASF,KAAT,EAAgBC,MAAhB,CAAd;eACUD,QAAQK,KAAlB,SAA2BJ,SAASI,KAApC;KAp0BM;;;;QAw0BNC,kBAAJ,GAAyB;YACfxJ,UAAUzR,SAASwQ,aAAT,CAAuB,MAAvB,CAAhB;;YAEM+F,SAAS;8BACO,qBADP;2BAEI,eAFJ;yBAGE,+BAHF;wBAIC;SAJhB;;YAOMpE,OAAOtF,OAAOoB,IAAP,CAAYsI,MAAZ,EAAoB6B,IAApB,CAAyB;mBAAS3G,QAAQpD,KAAR,CAAcoH,KAAd,MAAyByF,SAAlC;SAAzB,CAAb;;eAEOzP,MAAMC,EAAN,CAASK,MAAT,CAAgBoG,IAAhB,IAAwBoE,OAAOpE,IAAP,CAAxB,GAAuC,KAA9C;KAp1BM;;;WAAA,mBAw1BFV,OAx1BE,EAw1BO;mBACF,YAAM;kBACPhB,YAAN,CAAmBgB,OAAnB,EAA4B,IAA5B;oBACQ0J,YAAR,CAFa;kBAGP1K,YAAN,CAAmBgB,OAAnB,EAA4B,KAA5B;SAHJ,EAIG,CAJH;;CAz1BR;;ACTA;AACA;;AAMA,IAAMgF,UAAU;;WAEL,iBAAiBzW,SAASwQ,aAAT,CAAuB,OAAvB,CAFZ;WAGL,iBAAiBxQ,SAASwQ,aAAT,CAAuB,OAAvB,CAHZ;;;;SAAA,iBAON2B,IAPM,EAOAiJ,QAPA,EAOUC,WAPV,EAOuB;YAC3BC,MAAM,KAAV;YACIC,KAAK,KAAT;YACMC,UAAU/P,MAAMgQ,UAAN,EAAhB;YACMC,gBAAgBF,QAAQG,QAAR,IAAoBN,WAApB,IAAmC5E,QAAQ4E,WAAjE;;gBAEWD,QAAX,SAAuBjJ,IAAvB;iBACS,aAAL;sBACUsE,QAAQmF,KAAd;qBACKN,OAAO7E,QAAQoF,UAAf,KAA8B,CAACL,QAAQG,QAAT,IAAqBD,aAAnD,CAAL;;;iBAGC,aAAL;sBACUjF,QAAQqF,KAAd;qBACKR,OAAO7E,QAAQoF,UAApB;;;iBAGC,eAAL;iBACK,aAAL;sBACU,IAAN;qBACKpF,QAAQoF,UAAR,KAAuB,CAACL,QAAQG,QAAT,IAAqBD,aAA5C,CAAL;;;;sBAIMjF,QAAQqF,KAAR,IAAiBrF,QAAQmF,KAA/B;qBACKN,OAAO7E,QAAQoF,UAApB;;;eAGD;oBAAA;;SAAP;KAnCQ;;;;;SA2CN,YAAM;YACFL,UAAU/P,MAAMgQ,UAAN,EAAhB;eACO,CAACD,QAAQG,QAAT,IAAqBlQ,MAAMC,EAAN,CAAS0K,QAAT,CAAkB3K,MAAM+E,aAAN,CAAoB,OAApB,EAA6BuL,yBAA/C,CAA5B;KAFC,EA3CO;;;;aAkDHtQ,MAAMC,EAAN,CAAS0K,QAAT,CAAkB9K,OAAO0Q,qCAAzB,CAlDG;;;;iBAsDC,iBAAiBhc,SAASwQ,aAAT,CAAuB,OAAvB,CAtDlB;;;;;QAAA,gBA2DP2B,IA3DO,EA2DD;YACC8J,KADD,GACW,IADX,CACCA,KADD;;;YAGH;;gBAEI,CAAC,KAAKC,OAAN,IAAiB,CAACzQ,MAAMC,EAAN,CAAS0K,QAAT,CAAkB6F,MAAME,WAAxB,CAAtB,EAA4D;uBACjD,KAAP;;;;gBAIAhK,KAAKwC,QAAL,CAAc,SAAd,CAAJ,EAA8B;uBACnBsH,MAAME,WAAN,CAAkBhK,IAAlB,EAAwBuB,OAAxB,CAAgC,IAAhC,EAAsC,EAAtC,CAAP;;;;gBAIA,KAAK0I,OAAT,EAAkB;wBACNjK,IAAR;yBACS,YAAL;+BACW8J,MAAME,WAAN,CAAkB,kCAAlB,EAAsDzI,OAAtD,CAA8D,IAA9D,EAAoE,EAApE,CAAP;;yBAEC,WAAL;+BACWuI,MAAME,WAAN,CAAkB,4CAAlB,EAAgEzI,OAAhE,CAAwE,IAAxE,EAA8E,EAA9E,CAAP;;yBAEC,WAAL;+BACWuI,MAAME,WAAN,CAAkB,4BAAlB,EAAgDzI,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;;+BAGO,KAAP;;aAZZ,MAcO,IAAI,KAAK2I,OAAT,EAAkB;wBACblK,IAAR;yBACS,YAAL;+BACW8J,MAAME,WAAN,CAAkB,aAAlB,EAAiCzI,OAAjC,CAAyC,IAAzC,EAA+C,EAA/C,CAAP;;yBAEC,WAAL;+BACWuI,MAAME,WAAN,CAAkB,4BAAlB,EAAgDzI,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;yBAEC,WAAL;+BACWuI,MAAME,WAAN,CAAkB,uBAAlB,EAA2CzI,OAA3C,CAAmD,IAAnD,EAAyD,EAAzD,CAAP;;;+BAGO,KAAP;;;SAtChB,CAyCE,OAAOlH,CAAP,EAAU;mBACD,KAAP;;;;eAIG,KAAP;KA5GQ;;;;gBAgHA,gBAAgBxM,SAASwQ,aAAT,CAAuB,OAAvB,CAhHhB;;;;;sBAqHO,YAAM;;YAEjBpF,YAAY,KAAhB;YACI;gBACMoL,UAAU3J,OAAOyP,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;mBAAA,iBAC3C;gCACU,IAAZ;2BACO,IAAP;;aAHQ,CAAhB;mBAMOzN,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsC2H,OAAtC;mBACO+F,mBAAP,CAA2B,MAA3B,EAAmC,IAAnC,EAAyC/F,OAAzC;SARJ,CASE,OAAOhK,CAAP,EAAU;;;;eAILpB,SAAP;KAhBc,EArHN;;;gBAyIC,YAAM;YACToR,QAAQxc,SAASwQ,aAAT,CAAuB,OAAvB,CAAd;cACM2B,IAAN,GAAa,OAAb;eACOqK,MAAMrK,IAAN,KAAe,OAAtB;KAHQ,EAzIA;;;;WAiJL,kBAAkBnS,SAASoO,eAjJtB;;;iBAoJC3C,MAAMwP,kBAAN,KAA6B,KApJ9B;;;;mBAwJG,gBAAgB3P,MAAhB,IAA0BA,OAAOmR,UAAP,CAAkB,0BAAlB,EAA8C7H;CAxJ3F;;ACPA;AACA;AAMA,IAAM8H,QAAQ;cAAA,wBACG;YACL,CAAC,KAAKR,OAAV,EAAmB;mBACR,IAAP;;;eAGG,KAAKD,KAAL,CAAWvH,gBAAX,CAA4B,QAA5B,CAAP;KANM;;;;qBAAA,+BAUU;YACZ,CAAC,KAAKwH,OAAV,EAAmB;mBACR,IAAP;;;;YAIEtD,UAAU8D,MAAMC,UAAN,CAAiB1W,IAAjB,CAAsB,IAAtB,CAAhB;;YAEIwF,MAAMC,EAAN,CAASC,KAAT,CAAeiN,OAAf,CAAJ,EAA6B;mBAClB,IAAP;;;;YAIEgE,QAAQxP,MAAMkE,IAAN,CAAWsH,OAAX,EAAoBG,MAApB,CAA2B;mBAAU,CAACtN,MAAMC,EAAN,CAASC,KAAT,CAAekN,OAAO7B,YAAP,CAAoB,MAApB,CAAf,CAAX;SAA3B,CAAd;;;YAGIvL,MAAMC,EAAN,CAASC,KAAT,CAAeiR,KAAf,CAAJ,EAA2B;mBAChB,IAAP;;;;eAIGnR,MAAMoR,MAAN,CAAaD,MAAMvC,GAAN,CAAU;mBAAUvN,OAAO+L,OAAO7B,YAAP,CAAoB,MAApB,CAAP,CAAV;SAAV,CAAb,CAAP;KA/BM;UAAA,oBAkCD;YACD,CAAC,KAAKkF,OAAV,EAAmB;;;;YAIbnR,SAAS,IAAf;;;eAGOuR,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,SAApC,EAA+C;eAAA,iBACrC;;oBAEIrD,UAAU8D,MAAMC,UAAN,CAAiB1W,IAAjB,CAAsB8E,MAAtB,CAAhB;;oBAEIU,MAAMC,EAAN,CAASC,KAAT,CAAeiN,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;oBAGEhE,UAAUxH,MAAMkE,IAAN,CAAWsH,OAAX,EAAoBG,MAApB,CAA2B;2BAAUF,OAAO7B,YAAP,CAAoB,KAApB,MAA+BjM,OAAO8N,MAAhD;iBAA3B,CAAhB;;oBAEIpN,MAAMC,EAAN,CAASC,KAAT,CAAeiJ,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;uBAGG9H,OAAO8H,QAAQ,CAAR,EAAWoC,YAAX,CAAwB,MAAxB,CAAP,CAAP;aAfuC;eAAA,eAiBvCrK,KAjBuC,EAiBhC;;oBAEDiM,UAAU8D,MAAMC,UAAN,CAAiB1W,IAAjB,CAAsB8E,MAAtB,CAAhB;;oBAEIU,MAAMC,EAAN,CAASC,KAAT,CAAeiN,OAAf,CAAJ,EAA6B;;;;;oBAKvBhE,UAAUxH,MAAMkE,IAAN,CAAWsH,OAAX,EAAoBG,MAApB,CAA2B;2BAAUjM,OAAO+L,OAAO7B,YAAP,CAAoB,MAApB,CAAP,MAAwCrK,KAAlD;iBAA3B,CAAhB;;;oBAGIlB,MAAMC,EAAN,CAASC,KAAT,CAAeiJ,OAAf,CAAJ,EAA6B;;;;;oBAKvBxJ,YAAYwJ,QAAQmE,MAAR,CAAe;2BAAUtC,QAAQqG,IAAR,CAAa7W,IAAb,CAAkB8E,MAAlB,EAA0B8N,OAAO7B,YAAP,CAAoB,MAApB,CAA1B,CAAV;iBAAf,CAAlB;;;oBAGIvL,MAAMC,EAAN,CAASC,KAAT,CAAeP,SAAf,CAAJ,EAA+B;;;;;sBAKzByL,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;6BAC7DtP;iBADb;;;oBAKQoQ,WA9BD,GA8B0BhS,MA9B1B,CA8BCgS,WA9BD;oBA8BcC,OA9Bd,GA8B0BjS,MA9B1B,CA8BciS,OA9Bd;;;;uBAiCAf,KAAP,CAAa7M,GAAb,GAAmBhE,UAAU,CAAV,EAAa4L,YAAb,CAA0B,KAA1B,CAAnB;;;oBAGMiG,mBAAmB,SAAnBA,gBAAmB,GAAM;2BACpBF,WAAP,GAAqBA,WAArB;2BACO/G,GAAP,CAAW,gBAAX,EAA6BiH,gBAA7B;iBAFJ;uBAIOlH,EAAP,CAAU,gBAAV,EAA4BkH,gBAA5B;;;uBAGOhB,KAAP,CAAaiB,IAAb;;;oBAGIF,OAAJ,EAAa;2BACFG,IAAP;;;;sBAIEtG,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;6BAC1DtP;iBADb;;SApER;KA1CM;;;;;kBAAA,4BAuHO;YACT,CAAC,KAAKuP,OAAV,EAAmB;;;;;cAKbzJ,aAAN,CAAoBiK,MAAMC,UAAN,EAApB;;;;;aAKKV,KAAL,CAAWvL,YAAX,CAAwB,KAAxB,EAA+B,KAAKzF,MAAL,CAAYmS,UAA3C;;;;;aAKKnB,KAAL,CAAWiB,IAAX;;;aAGKG,KAAL,CAAWC,GAAX,CAAe,4BAAf;;CA1IR;;ACPA;AACA;AAKA,IAAMC,OAAO;OAAA,iBACkB;YAAvBpS,GAAuB,uEAAjB,EAAiB;YAAbF,MAAa,uEAAJ,EAAI;;YACnBQ,MAAMC,EAAN,CAASC,KAAT,CAAeR,GAAf,KAAuBM,MAAMC,EAAN,CAASC,KAAT,CAAeV,MAAf,CAA3B,EAAmD;mBACxC,EAAP;;;YAGAc,SAASN,MAAM+R,OAAN,CAAcvS,OAAOsS,IAArB,EAA2BpS,GAA3B,CAAb;;YAEIM,MAAMC,EAAN,CAASC,KAAT,CAAeI,MAAf,CAAJ,EAA4B;mBACjB,EAAP;;;YAGE2H,UAAU;0BACEzI,OAAOwS,QADT;uBAEDxS,OAAOyS;SAFtB;;eAKO1K,OAAP,CAAeU,OAAf,EAAwBlC,OAAxB,CAAgC,gBAG1B;;gBAFFrG,GAEE;gBADF8H,KACE;;qBACOxH,MAAMgN,UAAN,CAAiB1M,MAAjB,EAAyBZ,GAAzB,EAA8B8H,KAA9B,CAAT;SAJJ;;eAOOlH,MAAP;;CAxBR;;ACNA;AACA;;AAUA,IAAMyP,UAAU/P,MAAMgQ,UAAN,EAAhB;;AAEA,IAAMkC,WAAW;;;cAAA,wBAIA;YACHpP,MAAM,IAAIqP,GAAJ,CAAQ,KAAK3S,MAAL,CAAY4S,OAApB,EAA6BvS,OAAOwS,QAApC,CAAZ;YACMC,OAAOxP,IAAIyP,IAAJ,KAAa1S,OAAOwS,QAAP,CAAgBE,IAA7B,IAAsCxC,QAAQyC,IAAR,IAAgB,CAAC3S,OAAO4S,aAA3E;;eAEO;iBACE,KAAKjT,MAAL,CAAY4S,OADd;;SAAP;KARS;;;;;gBAAA,0BAgBE;YACP;iBACK1M,QAAL,CAAcwM,QAAd,GAAyBlS,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBT,QAAtB,CAA+BvM,OAA3D,CAAzB;;;iBAGKD,QAAL,CAAckN,OAAd,GAAwB;sBACd5S,MAAM4J,WAAN,CAAkBpP,IAAlB,CAAuB,IAAvB,EAA6B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BlB,IAA3D,CADc;uBAEb1R,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BC,KAA1D,CAFa;yBAGX7S,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BE,OAA1D,CAHW;wBAIZ9S,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BG,MAA1D,CAJY;6BAKP/S,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BI,WAA1D,CALO;sBAMdhT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BK,IAA1D,CANc;qBAOfjT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BM,GAA1D,CAPe;yBAQXlT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BO,OAA1D,CARW;0BASVnT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BQ,QAA1D,CATU;0BAUVpT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BS,QAA1D,CAVU;4BAWRrT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BU,UAA1D;aAXhB;;;iBAeK5N,QAAL,CAAc6N,QAAd,GAAyBvT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBY,QAAlD,CAAzB;;;iBAGK7N,QAAL,CAAc8N,MAAd,GAAuB;sBACbxT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBa,MAAtB,CAA6BC,IAAzD,CADa;wBAEXzT,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBa,MAAtB,CAA6BE,MAAzD;aAFZ;;;iBAMKhO,QAAL,CAAciO,OAAd,GAAwB;wBACZ3T,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBgB,OAAtB,CAA8Bhd,MAA1D,CADY;6BAEPqJ,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBgB,OAAtB,CAA8BrC,WAA1D,CAFO;0BAGVtR,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBgB,OAAtB,CAA8BC,QAA1D;aAHd;;;gBAOI5T,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc6N,QAA/B,CAAJ,EAA8C;qBACrC7N,QAAL,CAAciO,OAAd,CAAsBE,WAAtB,GAAoC,KAAKnO,QAAL,CAAc6N,QAAd,CAAuBhK,aAAvB,OAAyC,KAAK/J,MAAL,CAAYsU,UAAZ,CAAuBC,OAAhE,CAApC;;;mBAGG,IAAP;SAvCJ,CAwCE,OAAOC,KAAP,EAAc;;iBAEPpC,KAAL,CAAWqC,IAAX,CAAgB,iEAAhB,EAAmFD,KAAnF;;;iBAGKE,oBAAL,CAA0B,IAA1B;;mBAEO,KAAP;;KAhEK;;;;cAAA,sBAqEFxN,IArEE,EAqEIC,UArEJ,EAqEgB;YACnBwN,YAAY,4BAAlB;YACM/B,UAAUF,SAASkC,UAAT,CAAoB5Z,IAApB,CAAyB,IAAzB,CAAhB;YACM6Z,YAAc,CAACjC,QAAQE,IAAT,GAAgBF,QAAQtP,GAAxB,GAA8B,EAA5C,UAAkD,KAAKtD,MAAL,CAAY8U,UAApE;;;YAGMC,OAAOhgB,SAASigB,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAb;cACMtN,aAAN,CACI0N,IADJ,EAEIvU,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;kBACf,cADe;uBAEV;SAFf,CAFJ;;;YASM8N,MAAMlgB,SAASigB,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAZ;YACM1G,OAAU4G,QAAV,SAAsB3N,IAA5B;;;;;YAKI,UAAU+N,GAAd,EAAmB;gBACXC,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2DjH,IAA3D;SADJ,MAEO;gBACCiH,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiEjH,IAAjE;;;;aAICjH,WAAL,CAAiBiO,GAAjB;;eAEOF,IAAP;KApGS;;;;eAAA,uBAwGD7N,IAxGC,EAwGKiO,IAxGL,EAwGW;YAChB/N,OAAOkL,KAAKrR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB,CAAX;YACMmH,aAAavF,OAAO9F,MAAP,CAAc,EAAd,EAAkBqZ,IAAlB,CAAnB;;gBAEQjO,IAAR;iBACS,KAAL;uBACW,KAAP;;;iBAGC,SAAL;uBACW,SAAP;;;;;;;YAOJ,WAAWC,UAAf,EAA2B;uBACZ2B,KAAX,UAAwB,KAAK9I,MAAL,CAAYsU,UAAZ,CAAuBvL,MAA/C;SADJ,MAEO;uBACQD,KAAX,GAAmB,KAAK9I,MAAL,CAAYsU,UAAZ,CAAuBvL,MAA1C;;;eAGGvI,MAAM+E,aAAN,CAAoB,MAApB,EAA4B4B,UAA5B,EAAwCC,IAAxC,CAAP;KA/HS;;;;eAAA,uBAmIDA,IAnIC,EAmIK;YACV5G,MAAMC,EAAN,CAASC,KAAT,CAAe0G,IAAf,CAAJ,EAA0B;mBACf,IAAP;;;YAGEgO,QAAQ5U,MAAM+E,aAAN,CAAoB,MAApB,EAA4B;mBAC/B,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuBe,IAAvB,CAA4BrN;SADzB,CAAd;;cAIMhB,WAAN,CACIxG,MAAM+E,aAAN,CACI,MADJ,EAEI;mBACW,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuBe,IAAvB,CAA4BD;SAH3C,EAKIhO,IALJ,CADJ;;eAUOgO,KAAP;KAtJS;;;;gBAAA,wBA0JAE,UA1JA,EA0JYH,IA1JZ,EA0JkB;YACrBI,SAAS/U,MAAM+E,aAAN,CAAoB,QAApB,CAAf;YACM4B,aAAavF,OAAO9F,MAAP,CAAc,EAAd,EAAkBqZ,IAAlB,CAAnB;YACIjO,OAAO1G,MAAMgV,WAAN,CAAkBF,UAAlB,CAAX;;YAEIpL,SAAS,KAAb;YACIuL,cAAJ;YACIV,aAAJ;YACIW,qBAAJ;YACIC,oBAAJ;;YAEI,EAAE,UAAUxO,UAAZ,CAAJ,EAA6B;uBACdD,IAAX,GAAkB,QAAlB;;;YAGA,WAAWC,UAAf,EAA2B;gBACnBA,WAAW2B,KAAX,CAAiBY,QAAjB,CAA0B,KAAK1J,MAAL,CAAYsU,UAAZ,CAAuBsB,OAAjD,CAAJ,EAA+D;2BAChD9M,KAAX,UAAwB,KAAK9I,MAAL,CAAYsU,UAAZ,CAAuBsB,OAA/C;;SAFR,MAIO;uBACQ9M,KAAX,GAAmB,KAAK9I,MAAL,CAAYsU,UAAZ,CAAuBsB,OAA1C;;;;gBAIIN,UAAR;iBACS,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,OAAf;uBACO,MAAP;8BACc,OAAd;;;iBAGC,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,QAAf;uBACO,QAAP;8BACc,OAAd;;;iBAGC,UAAL;yBACa,IAAT;wBACQ,gBAAR;+BACe,iBAAf;uBACO,cAAP;8BACc,aAAd;;;iBAGC,YAAL;yBACa,IAAT;wBACQ,iBAAR;+BACe,gBAAf;uBACO,kBAAP;8BACc,iBAAd;;;iBAGC,YAAL;2BACexM,KAAX,UAAwB,KAAK9I,MAAL,CAAYsU,UAAZ,CAAuBsB,OAA/C;uBACO,MAAP;wBACQ,MAAR;uBACO,MAAP;;;;wBAIQ1O,IAAR;uBACOoO,UAAP;;;;YAIJpL,MAAJ,EAAY;;mBAEDlD,WAAP,CAAmB0L,SAASmD,UAAT,CAAoB7a,IAApB,CAAyB,IAAzB,EAA+B2a,WAA/B,EAA4C,EAAE7M,OAAO,eAAT,EAA5C,CAAnB;mBACO9B,WAAP,CAAmB0L,SAASmD,UAAT,CAAoB7a,IAApB,CAAyB,IAAzB,EAA+B+Z,IAA/B,EAAqC,EAAEjM,OAAO,mBAAT,EAArC,CAAnB;;;mBAGO9B,WAAP,CAAmB0L,SAASoD,WAAT,CAAqB9a,IAArB,CAA0B,IAA1B,EAAgC0a,YAAhC,EAA8C,EAAE5M,OAAO,gBAAT,EAA9C,CAAnB;mBACO9B,WAAP,CAAmB0L,SAASoD,WAAT,CAAqB9a,IAArB,CAA0B,IAA1B,EAAgCya,KAAhC,EAAuC,EAAE3M,OAAO,oBAAT,EAAvC,CAAnB;;;uBAGW,cAAX,IAA6B,KAA7B;SAVJ,MAWO;mBACI9B,WAAP,CAAmB0L,SAASmD,UAAT,CAAoB7a,IAApB,CAAyB,IAAzB,EAA+B+Z,IAA/B,CAAnB;mBACO/N,WAAP,CAAmB0L,SAASoD,WAAT,CAAqB9a,IAArB,CAA0B,IAA1B,EAAgCya,KAAhC,CAAnB;;;;cAIEvU,MAAN,CAAaiG,UAAb,EAAyB3G,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BlM,IAA9B,CAAhC,EAAqEC,UAArE,CAAzB;;cAEME,aAAN,CAAoBkO,MAApB,EAA4BpO,UAA5B;;;YAGID,SAAS,MAAb,EAAqB;gBACb,CAAC1G,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAKoD,QAAL,CAAckN,OAAd,CAAsBlM,IAAtB,CAAf,CAAL,EAAkD;qBACzChB,QAAL,CAAckN,OAAd,CAAsBlM,IAAtB,IAA8B,EAA9B;;;iBAGChB,QAAL,CAAckN,OAAd,CAAsBlM,IAAtB,EAA4B8O,IAA5B,CAAiCT,MAAjC;SALJ,MAMO;iBACErP,QAAL,CAAckN,OAAd,CAAsBlM,IAAtB,IAA8BqO,MAA9B;;;eAGGA,MAAP;KAhQS;;;;eAAA,uBAoQDrO,IApQC,EAoQKC,UApQL,EAoQiB;;YAEpBsO,QAAQjV,MAAM+E,aAAN,CACV,OADU,EAEV;iBACS4B,WAAWxL,EADpB;gBAEWwL,WAAWxL,EAAlB,WAFJ;mBAGW,KAAKqE,MAAL,CAAYsU,UAAZ,CAAuBvL;SALxB,EAOVuJ,KAAKrR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB,CAPU,CAAd;;;YAWM0B,QAAQlB,MAAM+E,aAAN,CACV,OADU,EAEV/E,MAAMU,MAAN,CACIV,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBa,MAAtB,CAA6B9M,IAA7B,CAAhC,CADJ,EAEI;kBACU,OADV;iBAES,CAFT;iBAGS,GAHT;kBAIU,IAJV;mBAKW,CALX;0BAMkB,KANlB;;kBAQU,QARV;+BAS0BC,WAAWxL,EAAjC,WATJ;6BAUqB,CAVrB;6BAWqB,GAXrB;6BAYqB;SAdzB,EAgBIwL,UAhBJ,CAFU,CAAd;;aAsBKjB,QAAL,CAAc8N,MAAd,CAAqB9M,IAArB,IAA6BxF,KAA7B;;;iBAGSuU,eAAT,CAAyBjb,IAAzB,CAA8B,IAA9B,EAAoC0G,KAApC;;eAEO;wBAAA;;SAAP;KA5SS;;;;kBAAA,0BAmTEwF,IAnTF,EAmTQC,UAnTR,EAmToB;YACvB4M,WAAWvT,MAAM+E,aAAN,CACb,UADa,EAEb/E,MAAMU,MAAN,CACIV,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBgB,OAAtB,CAA8BjN,IAA9B,CAAhC,CADJ,EAEI;iBACS,CADT;iBAES,GAFT;mBAGW,CAHX;kBAIU,cAJV;2BAKmB;SAPvB,EASIC,UATJ,CAFa,CAAjB;;;YAgBID,SAAS,QAAb,EAAuB;qBACVF,WAAT,CAAqBxG,MAAM+E,aAAN,CAAoB,MAApB,EAA4B,IAA5B,EAAkC,GAAlC,CAArB;;gBAEI2Q,SAAS,EAAb;oBACQhP,IAAR;qBACS,QAAL;6BACaoL,KAAKrR,GAAL,CAAS,QAAT,EAAmB,KAAKjB,MAAxB,CAAT;;;qBAGC,QAAL;6BACasS,KAAKrR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B,CAAT;;;;;;;qBAOCsH,SAAT,UAA0B4O,OAAO3I,WAAP,EAA1B;;;aAGCrH,QAAL,CAAciO,OAAd,CAAsBjN,IAAtB,IAA8B6M,QAA9B;;eAEOA,QAAP;KA1VS;;;;cAAA,sBA8VF7M,IA9VE,EA8VI;YACPC,aAAa3G,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBgB,OAAtB,CAA8BjN,IAA9B,CAAhC,CAAnB;;YAEMjC,YAAYzE,MAAM+E,aAAN,CAAoB,KAApB,EAA2B/E,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;mCAC7CA,WAAW2B,KADkC;0BAEpDwJ,KAAKrR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB;SAF2B,CAA3B,EAGd,OAHc,CAAlB;;;aAMKkG,QAAL,CAAciO,OAAd,CAAsBjN,IAAtB,IAA8BjC,SAA9B;;eAEOA,SAAP;KAzWS;;;;kBAAA,gCA6W6D;YAA1D+C,KAA0D,QAA1DA,KAA0D;YAAnDmO,IAAmD,QAAnDA,IAAmD;YAA7CjP,IAA6C,QAA7CA,IAA6C;YAAvCuL,KAAuC,QAAvCA,KAAuC;8BAAhC2C,KAAgC;YAAhCA,KAAgC,8BAAxB,IAAwB;gCAAlBgB,OAAkB;YAAlBA,OAAkB,gCAAR,KAAQ;;YAChErI,OAAOvN,MAAM+E,aAAN,CAAoB,IAApB,CAAb;;YAEMkQ,QAAQjV,MAAM+E,aAAN,CAAoB,OAApB,EAA6B;mBAChC,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuBsB;SADpB,CAAd;;YAIMS,QAAQ7V,MAAM+E,aAAN,CACV,OADU,EAEV/E,MAAMU,MAAN,CAAaV,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBa,MAAtB,CAA6B9M,IAA7B,CAAhC,CAAb,EAAkF;kBACxE,OADwE;4BAEhEA,IAFgE;wBAAA;4BAAA;mBAKvE;SALX,CAFU,CAAd;;YAWMoP,OAAO9V,MAAM+E,aAAN,CAAoB,MAApB,EAA4B,EAAEwD,QAAQ,EAAV,EAA5B,CAAb;;cAEM/B,WAAN,CAAkBqP,KAAlB;cACMrP,WAAN,CAAkBsP,IAAlB;cACMC,kBAAN,CAAyB,WAAzB,EAAsC9D,KAAtC;;YAEIjS,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4O,KAAjB,CAAJ,EAA6B;kBACnBpO,WAAN,CAAkBoO,KAAlB;;;aAGCpO,WAAL,CAAiByO,KAAjB;aACKzO,WAAL,CAAiB+G,IAAjB;KA1YS;;;;qBAAA,+BA8YgD;YAA3CxG,MAA2C,uEAAlC,IAAkC;YAA5B+E,IAA4B,uEAArB,CAAqB;YAAlBE,QAAkB,uEAAP,KAAO;;;YAErD,CAAChM,MAAMC,EAAN,CAAS+F,OAAT,CAAiBe,MAAjB,CAAD,IAA6B,CAAC/G,MAAMC,EAAN,CAASgM,MAAT,CAAgBH,IAAhB,CAAlC,EAAyD;;;;;YAKnDkK,aAAahW,MAAMsM,QAAN,CAAe,KAAKsH,QAApB,IAAgC,CAAnD;;;eAGO9M,SAAP,GAAmB9G,MAAMkM,UAAN,CAAiBJ,IAAjB,EAAuBkK,UAAvB,EAAmChK,QAAnC,CAAnB;KAxZS;;;;gBAAA,0BA4ZE;YACP,CAAC,KAAKrM,SAAL,CAAemQ,EAApB,EAAwB;;;;;YAKpB9P,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc8N,MAAd,CAAqBE,MAAtC,CAAJ,EAAmD;qBACtCuC,QAAT,CAAkBzb,IAAlB,CAAuB,IAAvB,EAA6B,KAAKkL,QAAL,CAAc8N,MAAd,CAAqBE,MAAlD,EAA0D,KAAKwC,KAAL,GAAa,CAAb,GAAiB,KAAKxC,MAAhF;;;;YAIA1T,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAckN,OAAd,CAAsBK,IAAvC,CAAJ,EAAkD;kBACxC5H,WAAN,CAAkB,KAAK3F,QAAL,CAAckN,OAAd,CAAsBK,IAAxC,EAA8C,KAAKiD,KAAL,IAAc,KAAKxC,MAAL,KAAgB,CAA5E;;KAxaK;;;;YAAA,oBA6aJ3M,MA7aI,EA6ae;YAAXS,KAAW,uEAAH,CAAG;;YACpB,CAACxH,MAAMC,EAAN,CAAS+F,OAAT,CAAiBe,MAAjB,CAAL,EAA+B;;;;;eAKxBS,KAAP,GAAeA,KAAf;;;iBAGSiO,eAAT,CAAyBjb,IAAzB,CAA8B,IAA9B,EAAoCuM,MAApC;KAtbS;;;;kBAAA,0BA0bEiD,KA1bF,EA0bS;;;YACd,CAAC,KAAKrK,SAAL,CAAemQ,EAAhB,IAAsB,CAAC9P,MAAMC,EAAN,CAAS+J,KAAT,CAAeA,KAAf,CAA3B,EAAkD;;;;YAI9CxC,QAAQ,CAAZ;;YAEM2O,cAAc,SAAdA,WAAc,CAACpP,MAAD,EAAS7F,KAAT,EAAmB;gBAC7BsG,QAAQxH,MAAMC,EAAN,CAASgM,MAAT,CAAgB/K,KAAhB,IAAyBA,KAAzB,GAAiC,CAA/C;gBACMqS,WAAWvT,MAAMC,EAAN,CAAS+F,OAAT,CAAiBe,MAAjB,IAA2BA,MAA3B,GAAoC,MAAKrB,QAAL,CAAciO,OAAd,CAAsBhd,MAA3E;;;gBAGIqJ,MAAMC,EAAN,CAAS+F,OAAT,CAAiBuN,QAAjB,CAAJ,EAAgC;yBACnB/L,KAAT,GAAiBA,KAAjB;;;oBAGMyN,QAAQ1B,SAAS6C,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;oBACIpW,MAAMC,EAAN,CAAS+F,OAAT,CAAiBiP,KAAjB,CAAJ,EAA6B;0BACnB/N,UAAN,CAAiB,CAAjB,EAAoBmP,SAApB,GAAgC7O,KAAhC;;;SAXZ;;YAgBIwC,KAAJ,EAAW;oBACCA,MAAMtD,IAAd;;qBAES,YAAL;qBACK,SAAL;qBACK,QAAL;4BACY1G,MAAMsW,aAAN,CAAoB,KAAKhF,WAAzB,EAAsC,KAAKsC,QAA3C,CAAR;;;wBAGI5J,MAAMtD,IAAN,KAAe,YAAnB,EAAiC;iCACpBuP,QAAT,CAAkBzb,IAAlB,CAAuB,IAAvB,EAA6B,KAAKkL,QAAL,CAAc8N,MAAd,CAAqBC,IAAlD,EAAwDjM,KAAxD;;;;;;qBAMH,SAAL;qBACK,UAAL;gCACgB,KAAK9B,QAAL,CAAciO,OAAd,CAAsBhd,MAAlC,EAA0C,KAAK4f,QAAL,GAAgB,GAA1D;;;;;;;;KAneH;;;;mBAAA,2BA8eGxP,MA9eH,EA8eW;;YAEdgK,QAAQ/Q,MAAMC,EAAN,CAAS+J,KAAT,CAAejD,MAAf,IAAyBA,OAAOA,MAAhC,GAAyCA,MAAvD;;;YAGI,CAAC/G,MAAMC,EAAN,CAAS+F,OAAT,CAAiB+K,KAAjB,CAAD,IAA4BA,MAAMxF,YAAN,CAAmB,MAAnB,MAA+B,OAA/D,EAAwE;;;;;cAKlEtG,YAAN,CAAmB,eAAnB,EAAoC8L,MAAMvJ,KAA1C;;;YAGI,CAACuI,QAAQyG,QAAb,EAAuB;;;;;cAKjB5T,KAAN,CAAY6T,WAAZ,CAAwB,SAAxB,EAAsC1F,MAAMvJ,KAAN,GAAcuJ,MAAMpF,GAApB,GAA0B,GAAhE;KAhgBS;;;;qBAAA,6BAogBK3B,KApgBL,EAogBY;;;;YAGjB,CAAC,KAAKxK,MAAL,CAAYkX,QAAZ,CAAqBjD,IAAtB,IACA,CAACzT,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc8N,MAAd,CAAqBC,IAAtC,CADD,IAEA,CAACzT,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAciO,OAAd,CAAsBE,WAAvC,CAFD,IAGA,KAAKD,QAAL,KAAkB,CAJtB,EAKE;;;;;YAKE+C,UAAU,CAAd;YACMC,aAAa,KAAKlR,QAAL,CAAc6N,QAAd,CAAuBsD,qBAAvB,EAAnB;YACMC,UAAa,KAAKtX,MAAL,CAAYsU,UAAZ,CAAuBC,OAApC,cAAN;;YAEMrK,SAAS,yBAAU;kBACfqN,WAAN,CAAkB,OAAKrR,QAAL,CAAciO,OAAd,CAAsBE,WAAxC,EAAqDiD,OAArD,EAA8DpN,OAA9D;SADJ;;;YAKI,KAAKsN,KAAT,EAAgB;mBACL,KAAP;;;;;YAKAhX,MAAMC,EAAN,CAAS+J,KAAT,CAAeA,KAAf,CAAJ,EAA2B;sBACb,MAAM4M,WAAW1H,KAAjB,IAA0BlF,MAAMiN,KAAN,GAAcL,WAAWM,IAAnD,CAAV;SADJ,MAEO,IAAIlX,MAAMmX,QAAN,CAAe,KAAKzR,QAAL,CAAciO,OAAd,CAAsBE,WAArC,EAAkDiD,OAAlD,CAAJ,EAAgE;sBACzDM,WAAW,KAAK1R,QAAL,CAAciO,OAAd,CAAsBE,WAAtB,CAAkCjR,KAAlC,CAAwCsU,IAAnD,EAAyD,EAAzD,CAAV;SADG,MAEA;;;;;YAKHP,UAAU,CAAd,EAAiB;sBACH,CAAV;SADJ,MAEO,IAAIA,UAAU,GAAd,EAAmB;sBACZ,GAAV;;;;iBAIKU,iBAAT,CAA2B7c,IAA3B,CAAgC,IAAhC,EAAsC,KAAKkL,QAAL,CAAciO,OAAd,CAAsBE,WAA5D,EAAyE,KAAKD,QAAL,GAAgB,GAAhB,GAAsB+C,OAA/F;;;aAGKjR,QAAL,CAAciO,OAAd,CAAsBE,WAAtB,CAAkCjR,KAAlC,CAAwCsU,IAAxC,GAAkDP,OAAlD;;;;YAII3W,MAAMC,EAAN,CAAS+J,KAAT,CAAeA,KAAf,KAAyB,CACzB,YADyB,EAEzB,YAFyB,EAG3Bd,QAH2B,CAGlBc,MAAMtD,IAHY,CAA7B,EAGwB;mBACbsD,MAAMtD,IAAN,KAAe,YAAtB;;KA1jBK;;;;cAAA,sBA+jBFsD,KA/jBE,EA+jBK;;YAERsN,SAAS,CAACtX,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAciO,OAAd,CAAsBC,QAAvC,CAAD,IAAqD,KAAKpU,MAAL,CAAY+X,UAAhF;;;iBAGSF,iBAAT,CAA2B7c,IAA3B,CAAgC,IAAhC,EAAsC,KAAKkL,QAAL,CAAciO,OAAd,CAAsBrC,WAA5D,EAAyEgG,SAAS,KAAK1D,QAAL,GAAgB,KAAKtC,WAA9B,GAA4C,KAAKA,WAA1H,EAAuIgG,MAAvI;;;YAGItN,SAASA,MAAMtD,IAAN,KAAe,YAAxB,IAAwC,KAAK8J,KAAL,CAAWgH,OAAvD,EAAgE;;;;;iBAKvDC,cAAT,CAAwBjd,IAAxB,CAA6B,IAA7B,EAAmCwP,KAAnC;KA5kBS;;;;kBAAA,4BAglBI;;YAET,CAAC,KAAKrK,SAAL,CAAemQ,EAAhB,IAAuB,CAAC,KAAKtQ,MAAL,CAAY+X,UAAb,IAA2B,KAAKjG,WAA3D,EAAyE;;;;;YAKnEoG,cAAc1X,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAciO,OAAd,CAAsBC,QAAvC,CAApB;;;YAGI,CAAC8D,WAAD,IAAgB,KAAKlY,MAAL,CAAYmY,eAA5B,IAA+C,KAAKC,MAAxD,EAAgE;qBACnDP,iBAAT,CAA2B7c,IAA3B,CAAgC,IAAhC,EAAsC,KAAKkL,QAAL,CAAciO,OAAd,CAAsBrC,WAA5D,EAAyE,KAAKsC,QAA9E;;;;YAIA8D,WAAJ,EAAiB;qBACJL,iBAAT,CAA2B7c,IAA3B,CAAgC,IAAhC,EAAsC,KAAKkL,QAAL,CAAciO,OAAd,CAAsBC,QAA5D,EAAsE,KAAKA,QAA3E;;;;iBAIKiE,iBAAT,CAA2Brd,IAA3B,CAAgC,IAAhC;KApmBS;;;;aAAA,qBAwmBHsd,OAxmBG,EAwmBMpO,MAxmBN,EAwmBc;cACjB1E,YAAN,CAAmB,KAAKU,QAAL,CAAc0N,QAAd,CAAuB2E,IAAvB,CAA4BD,OAA5B,CAAnB,EAAyD,CAACpO,MAA1D;KAzmBS;;;;;kBAAA,0BA8mBEqB,OA9mBF,EA8mBW;;;;YAEhB,CAAC/K,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BC,OAA9C,CAAL,EAA6D;;;;YAIvDvR,OAAO,SAAb;YACMiP,OAAO,KAAKjQ,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BC,OAA7B,CAAqC1O,aAArC,CAAmD,IAAnD,CAAb;;;YAGIvJ,MAAMC,EAAN,CAASqC,KAAT,CAAeyI,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAakN,OAAb,GAAuBlN,QAAQuC,MAAR,CAAe;uBAAW,OAAK9N,MAAL,CAAYyY,OAAZ,CAAoBlN,OAApB,CAA4B7B,QAA5B,CAAqC+O,OAArC,CAAX;aAAf,CAAvB;;;;YAIEvO,SAAS,CAAC1J,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK6K,OAAL,CAAakN,OAA5B,CAAD,IAAyC,KAAKlN,OAAL,CAAakN,OAAb,CAAqB1X,MAArB,GAA8B,CAAtF;iBACS2X,SAAT,CAAmB1d,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoCgD,MAApC;;;iBAGSyO,SAAT,CAAmB3d,IAAnB,CAAwB,IAAxB;;;YAGI,CAACkP,MAAL,EAAa;;;;;cAKP0O,YAAN,CAAmBzC,IAAnB;;;YAGM0C,WAAW,SAAXA,QAAW,UAAW;gBAClBpD,QAAQnD,KAAKrR,GAAL,mBAAyBwX,OAAzB,EAAoC,OAAKzY,MAAzC,CAAd;;gBAEI,CAACyV,MAAM1U,MAAX,EAAmB;uBACR,IAAP;;;mBAGG2R,SAASoG,WAAT,CAAqB9d,IAArB,CAA0B,MAA1B,EAAgCya,KAAhC,CAAP;SAPJ;;;aAWKlK,OAAL,CAAakN,OAAb,CACKM,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;gBACNC,UAAU,OAAKlZ,MAAL,CAAYyY,OAAZ,CAAoBlN,OAApC;mBACO2N,QAAQlL,OAAR,CAAgBgL,CAAhB,IAAqBE,QAAQlL,OAAR,CAAgBiL,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;SAHR,EAKK1S,OALL,CAKa,mBAAW;qBACP4S,cAAT,CAAwBne,IAAxB,CAA6B,MAA7B,EAAmC;uBACxByd,OADwB;0BAAA;0BAAA;uBAIxB/F,SAAS0G,QAAT,CAAkBpe,IAAlB,CAAuB,MAAvB,EAA6B,SAA7B,EAAwCyd,OAAxC,CAJwB;uBAKxBI,SAASJ,OAAT;aALX;SANR;;iBAeSY,aAAT,CAAuBre,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwCiP,IAAxC;KAtqBS;;;;YAAA,oBA0qBJmC,OA1qBI,EA0qBKtQ,KA1qBL,EA0qBY;gBACbsQ,OAAR;iBACS,OAAL;uBACWtQ,UAAU,CAAV,GAAcsK,KAAKrR,GAAL,CAAS,QAAT,EAAmB,KAAKjB,MAAxB,CAAd,GAAmDgI,KAAnD,YAAP;;iBAEC,SAAL;oBACQxH,MAAMC,EAAN,CAASgM,MAAT,CAAgBzE,KAAhB,CAAJ,EAA4B;wBAClByN,QAAQnD,KAAKrR,GAAL,mBAAyB+G,KAAzB,EAAkC,KAAKhI,MAAvC,CAAd;;wBAEI,CAACyV,MAAM1U,MAAX,EAAmB;+BACLiH,KAAV;;;2BAGGyN,KAAP;;;uBAGGjV,MAAMiN,WAAN,CAAkBzF,KAAlB,CAAP;;iBAEC,UAAL;uBACW6L,SAASuF,QAAT,CAAkBpe,IAAlB,CAAuB,IAAvB,CAAP;;;uBAGO,IAAP;;KAhsBC;;;;iBAAA,yBAqsBCsd,OArsBD,EAqsBUrT,SArsBV,EAqsBqBvD,KArsBrB,EAqsB4B;YAC/B4X,OAAO,KAAKpT,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BF,OAA7B,CAAb;YACItQ,QAAQ,IAAZ;YACImO,OAAOlR,SAAX;;gBAEQqT,OAAR;iBACS,UAAL;wBACY,KAAKiB,YAAb;;;;wBAIQ,CAAC/Y,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAD,GAAyBA,KAAzB,GAAiC,KAAK4W,OAAL,CAAzC;;;oBAGI9X,MAAMC,EAAN,CAASC,KAAT,CAAesH,KAAf,CAAJ,EAA2B;4BACf,KAAKhI,MAAL,CAAYsY,OAAZ,EAAqBkB,OAA7B;;;;oBAIA,CAAChZ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK6K,OAAL,CAAa+M,OAAb,CAAf,CAAD,IAA0C,CAAC,KAAK/M,OAAL,CAAa+M,OAAb,EAAsB5O,QAAtB,CAA+B1B,KAA/B,CAA/C,EAAsF;yBAC7EoK,KAAL,CAAWqC,IAAX,6BAAyCzM,KAAzC,eAAuDsQ,OAAvD;;;;;oBAKA,CAAC,KAAKtY,MAAL,CAAYsY,OAAZ,EAAqB/M,OAArB,CAA6B7B,QAA7B,CAAsC1B,KAAtC,CAAL,EAAmD;yBAC1CoK,KAAL,CAAWqC,IAAX,0BAAsCzM,KAAtC,eAAoDsQ,OAApD;;;;;;;;YAQR,CAAC9X,MAAMC,EAAN,CAAS+F,OAAT,CAAiB2P,IAAjB,CAAL,EAA6B;mBAClBmD,QAAQA,KAAKvP,aAAL,CAAmB,IAAnB,CAAf;;;;YAIA,CAACvJ,MAAMC,EAAN,CAAS+F,OAAT,CAAiB2P,IAAjB,CAAL,EAA6B;;;;;YAKvBV,QAAQ,KAAKvP,QAAL,CAAc0N,QAAd,CAAuB2E,IAAvB,CAA4BD,OAA5B,EAAqCvO,aAArC,OAAuD,KAAK/J,MAAL,CAAYsU,UAAZ,CAAuBe,IAAvB,CAA4BrN,KAAnF,CAAd;cACM7C,SAAN,GAAkBuN,SAAS0G,QAAT,CAAkBpe,IAAlB,CAAuB,IAAvB,EAA6Bsd,OAA7B,EAAsCtQ,KAAtC,CAAlB;;;YAGMT,SAAS4O,QAAQA,KAAKpM,aAAL,mBAAmC/B,KAAnC,QAAvB;;YAEIxH,MAAMC,EAAN,CAAS+F,OAAT,CAAiBe,MAAjB,CAAJ,EAA8B;mBACnB6O,OAAP,GAAiB,IAAjB;;KAxvBK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAA,6BA4yBK;;;;YAERlP,OAAO,UAAb;YACMiP,OAAO,KAAKjQ,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6B3E,QAA7B,CAAsC9J,aAAtC,CAAoD,IAApD,CAAb;YACM0P,SAAS5F,SAAS6F,SAAT,CAAmB1e,IAAnB,CAAwB,IAAxB,CAAf;;;iBAGS0d,SAAT,CAAmB1d,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoCuS,OAAO1Y,MAA3C;;;cAGM6X,YAAN,CAAmBzC,IAAnB;;;iBAGSwC,SAAT,CAAmB3d,IAAnB,CAAwB,IAAxB;;;YAGI,CAACye,OAAO1Y,MAAZ,EAAoB;;;;;YAKdwK,UAAUkO,OAAOrK,GAAP,CAAW,UAACuK,KAAD,EAAQ3R,KAAR;mBAAmB;4BAAA;yBAEjC,OAAK6L,QAAL,CAAc+F,MAAd,IAAwB,OAAKL,YAAL,KAAsBvR,KAFb;uBAGnC6L,SAASuF,QAAT,CAAkBpe,IAAlB,CAAuB,MAAvB,EAA6B2e,KAA7B,CAHmC;uBAInCA,MAAME,QAAN,IAAkBnH,SAASoG,WAAT,CAAqB9d,IAArB,CAA0B,MAA1B,EAAgC2e,MAAME,QAAN,CAAexM,WAAf,EAAhC,CAJiB;0BAAA;sBAMpC;aANiB;SAAX,CAAhB;;;gBAUQyM,OAAR,CAAgB;mBACL,CAAC,CADI;qBAEH,CAAC,KAAKjG,QAAL,CAAc+F,MAFZ;mBAGLtH,KAAKrR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B,CAHK;sBAAA;kBAKN;SALV;;;gBASQuG,OAAR,CAAgBmM,SAASyG,cAAT,CAAwBnd,IAAxB,CAA6B,IAA7B,CAAhB;;iBAESqd,aAAT,CAAuBre,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwCiP,IAAxC;KAt1BS;;;;gBAAA,wBA01BA5K,OA11BA,EA01BS;;;;YAEd,CAAC,KAAKvL,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAD,IAA8C,CAAC,KAAK1J,MAAL,CAAY4T,QAAZ,CAAqBlK,QAArB,CAA8B,OAA9B,CAAnD,EAA2F;;;;;YAKvF,CAAClJ,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BuB,KAA9C,CAAL,EAA2D;;;;YAIrD7S,OAAO,OAAb;;;YAGI1G,MAAMC,EAAN,CAASqC,KAAT,CAAeyI,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAawO,KAAb,GAAqBxO,OAArB;SADJ,MAEO,IAAI,KAAK0F,OAAL,IAAgB,KAAK+I,OAAzB,EAAkC;iBAChCzO,OAAL,CAAawO,KAAb,GAAqB,CACjB,GADiB,EAEjB,IAFiB,EAGjB,CAHiB,EAIjB,IAJiB,EAKjB,GALiB,EAMjB,IANiB,EAOjB,CAPiB,CAArB;;;;aAYCxO,OAAL,CAAawO,KAAb,GAAqB,KAAKxO,OAAL,CAAawO,KAAb,CAAmBjM,MAAnB,CAA0B;mBAAS,OAAK9N,MAAL,CAAY+Z,KAAZ,CAAkBxO,OAAlB,CAA0B7B,QAA1B,CAAmCqQ,KAAnC,CAAT;SAA1B,CAArB;;;YAGM7P,SAAS,CAAC1J,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK6K,OAAL,CAAawO,KAA5B,CAAD,IAAuC,KAAKxO,OAAL,CAAawO,KAAb,CAAmBhZ,MAAnB,GAA4B,CAAlF;iBACS2X,SAAT,CAAmB1d,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoCgD,MAApC;;;iBAGSyO,SAAT,CAAmB3d,IAAnB,CAAwB,IAAxB;;;YAGI,CAACkP,MAAL,EAAa;;;;;YAKPiM,OAAO,KAAKjQ,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BuB,KAA7B,CAAmChQ,aAAnC,CAAiD,IAAjD,CAAb;;;cAGM6O,YAAN,CAAmBzC,IAAnB;;;aAGK5K,OAAL,CAAawO,KAAb,CAAmBxT,OAAnB,CAA2B,iBAAS;qBACvB4S,cAAT,CAAwBne,IAAxB,CAA6B,MAA7B,EAAmC;uBACxB+e,KADwB;0BAAA;0BAAA;uBAIxBrH,SAAS0G,QAAT,CAAkBpe,IAAlB,CAAuB,MAAvB,EAA6B,OAA7B,EAAsC+e,KAAtC;aAJX;SADJ;;iBASSV,aAAT,CAAuBre,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwCiP,IAAxC;KAr5BS;;;;aAAA,uBAy5BD;YACAoC,IADA,GACS,KAAKrS,QAAL,CAAc0N,QADvB,CACA2E,IADA;;YAEFjB,UAAU,CAAC9W,MAAMC,EAAN,CAASC,KAAT,CAAe6X,IAAf,CAAD,IAAyB3W,OAAOqY,MAAP,CAAc1B,IAAd,EAAoB2B,IAApB,CAAyB;mBAAO,CAACC,IAAIpR,MAAZ;SAAzB,CAAzC;;cAEMvD,YAAN,CAAmB,KAAKU,QAAL,CAAc0N,QAAd,CAAuByB,IAA1C,EAAgD,CAACiC,OAAjD;KA75BS;;;;cAAA,sBAi6BF9M,KAj6BE,EAi6BK;YACN4P,IADM,GACG,KAAKlU,QAAL,CAAc0N,QADjB,CACNwG,IADM;;YAER7E,SAAS,KAAKrP,QAAL,CAAckN,OAAd,CAAsBQ,QAArC;;;YAGI,CAACpT,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4T,IAAjB,CAAD,IAA2B,CAAC5Z,MAAMC,EAAN,CAAS+F,OAAT,CAAiB+O,MAAjB,CAAhC,EAA0D;;;;YAIpD8E,OAAO7Z,MAAMC,EAAN,CAASuI,OAAT,CAAiBwB,KAAjB,IAA0BA,KAA1B,GAAkChK,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4T,IAAjB,KAA0BA,KAAKnR,YAAL,CAAkB,QAAlB,CAAzE;;YAEIzI,MAAMC,EAAN,CAAS+J,KAAT,CAAeA,KAAf,CAAJ,EAA2B;gBACjB8P,aAAa9Z,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4T,IAAjB,KAA0BA,KAAK9Q,QAAL,CAAckB,MAAMjD,MAApB,CAA7C;gBACMgT,WAAW/P,MAAMjD,MAAN,KAAiB,KAAKrB,QAAL,CAAckN,OAAd,CAAsBQ,QAAxD;;;;;gBAKI0G,cAAe,CAACA,UAAD,IAAe,CAACC,QAAhB,IAA4BF,IAA/C,EAAsD;;;;;gBAKlDE,QAAJ,EAAc;sBACJC,eAAN;;;;;YAKJha,MAAMC,EAAN,CAAS+F,OAAT,CAAiB+O,MAAjB,CAAJ,EAA8B;mBACnB9P,YAAP,CAAoB,eAApB,EAAqC4U,IAArC;;;YAGA7Z,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4T,IAAjB,CAAJ,EAA4B;kBAClB5U,YAAN,CAAmB4U,IAAnB,EAAyB,CAACC,IAA1B;kBACM9C,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBe,IAAvB,CAA4BpR,IAAvE,EAA6EoW,IAA7E;;gBAEIA,IAAJ,EAAU;qBACDnR,eAAL,CAAqB,UAArB;aADJ,MAEO;qBACEzD,YAAL,CAAkB,UAAlB,EAA8B,CAAC,CAA/B;;;KAz8BC;;;;cAAA,sBA+8BF0U,GA/8BE,EA+8BG;YACNM,QAAQN,IAAIxT,SAAJ,CAAc,IAAd,CAAd;cACMvD,KAAN,CAAYsX,QAAZ,GAAuB,UAAvB;cACMtX,KAAN,CAAYuX,OAAZ,GAAsB,CAAtB;cACMzR,eAAN,CAAsB,QAAtB;;;cAGM7C,IAAN,CAAWoU,MAAMhR,gBAAN,CAAuB,aAAvB,CAAX,EAAkDlD,OAAlD,CAA0D,iBAAS;gBACzDqU,OAAOlZ,MAAMqK,YAAN,CAAmB,MAAnB,CAAb;kBACMtG,YAAN,CAAmB,MAAnB,EAA8BmV,IAA9B;SAFJ;;;YAMI/T,UAAJ,CAAeG,WAAf,CAA2ByT,KAA3B;;;YAGM/K,QAAQ+K,MAAMI,WAApB;YACMlL,SAAS8K,MAAMK,YAArB;;;cAGMtT,aAAN,CAAoBiT,KAApB;;eAEO;wBAAA;;SAAP;KAr+BS;;;;WAAA,qBA4+BQ;YAAblT,MAAa,uEAAJ,EAAI;YACT8N,IADS,GACA,KAAKnP,QAAL,CAAc0N,QADd,CACTyB,IADS;;YAEXiE,OAAOvkB,SAASgQ,cAAT,CAAwBwC,MAAxB,CAAb;;;YAGI,CAAC/G,MAAMC,EAAN,CAAS+F,OAAT,CAAiB8S,IAAjB,CAAL,EAA6B;;;;;YAKvByB,QAAQzB,KAAKvN,YAAL,CAAkB,MAAlB,MAA8B,UAA5C;YACI,CAACgP,KAAL,EAAY;;;;;;YAMN7O,UAAUmJ,KAAKtL,aAAL,CAAmB,iCAAnB,CAAhB;YACM9E,YAAYiH,QAAQrF,UAA1B;;;cAGMR,IAAN,CAAWgP,KAAK5L,gBAAL,sBAAyCyC,QAAQH,YAAR,CAAqB,IAArB,CAAzC,QAAX,EAAqFxF,OAArF,CAA6F,kBAAU;mBAC5Fd,YAAP,CAAoB,eAApB,EAAqC,KAArC;SADJ;;;YAKI+F,QAAQwP,WAAR,IAAuB,CAACxP,QAAQyP,aAApC,EAAmD;;sBAErC7X,KAAV,CAAgBsM,KAAhB,GAA2BxD,QAAQ2O,WAAnC;sBACUzX,KAAV,CAAgBuM,MAAhB,GAA4BzD,QAAQ4O,YAApC;;;gBAGMI,OAAOxI,SAASyI,UAAT,CAAoBngB,IAApB,CAAyB,IAAzB,EAA+Bse,IAA/B,CAAb;;;gBAGM8B,UAAU,SAAVA,OAAU,IAAK;;oBAEb7Z,EAAEgG,MAAF,KAAatC,SAAb,IAA0B,CAAC,CAC3B,OAD2B,EAE3B,QAF2B,EAG7ByE,QAH6B,CAGpBnI,EAAE8Z,YAHkB,CAA/B,EAG4B;;;;;0BAKlBjY,KAAV,CAAgBsM,KAAhB,GAAwB,EAAxB;0BACUtM,KAAV,CAAgBuM,MAAhB,GAAyB,EAAzB;;;sBAGM5E,GAAN,CAAU9F,SAAV,EAAqBzE,MAAMwP,kBAA3B,EAA+CoL,OAA/C;aAdJ;;;kBAkBMtQ,EAAN,CAAS7F,SAAT,EAAoBzE,MAAMwP,kBAA1B,EAA8CoL,OAA9C;;;sBAGUhY,KAAV,CAAgBsM,KAAhB,GAA2BwL,KAAKxL,KAAhC;sBACUtM,KAAV,CAAgBuM,MAAhB,GAA4BuL,KAAKvL,MAAjC;;;;cAIEnK,YAAN,CAAmB0G,OAAnB,EAA4B,IAA5B;gBACQzG,YAAR,CAAqB,UAArB,EAAiC,CAAC,CAAlC;;;cAGMD,YAAN,CAAmB8T,IAAnB,EAAyB,KAAzB;;YAEMf,OAAO/X,MAAM4J,WAAN,CAAkBpP,IAAlB,CAAuB,IAAvB,uBAAgDuM,MAAhD,QAAb;cACMlB,IAAN,CAAWkS,IAAX,EAAiBhS,OAAjB,CAAyB,eAAO;gBACxBd,YAAJ,CAAiB,eAAjB,EAAkC,IAAlC;SADJ;aAGKyD,eAAL,CAAqB,UAArB;;;aAGKO,gBAAL,CAAsB,yDAAtB,EAAiF,CAAjF,EAAoFmB,KAApF;KAtjCS;;;;;UAAA,kBA2jCN1F,IA3jCM,EA2jCA;;;;YAEL1E,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAY0S,QAA3B,CAAJ,EAA0C;mBAC/B,IAAP;;;;YAIEzN,YAAYzE,MAAM+E,aAAN,CAAoB,KAApB,EAA2B/E,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBT,QAAtB,CAA+BvM,OAA/D,CAA3B,CAAlB;;;YAGI,KAAKnG,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;sBAChC1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;sBAC/B1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7B1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrC1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;gBACrCqK,WAAWvT,MAAM+E,aAAN,CAAoB,KAApB,EAA2B/E,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBY,QAAtD,CAA3B,CAAjB;;;gBAGME,OAAOvB,SAAS6I,WAAT,CAAqBvgB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;mCAChCkK,KAAKvJ;aADb,CAAb;qBAGSqL,WAAT,CAAqBiN,KAAKwB,KAA1B;qBACSzO,WAAT,CAAqBiN,KAAKvS,KAA1B;;;qBAGSsF,WAAT,CAAqB0L,SAAS8I,cAAT,CAAwBxgB,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB;;;;;gBAKI,KAAKgF,MAAL,CAAYkX,QAAZ,CAAqBjD,IAAzB,EAA+B;oBACrBM,UAAU/T,MAAM+E,aAAN,CACZ,MADY,EAEZ;2BACW,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuBC;iBAHtB,EAKZ,OALY,CAAhB;;yBAQSvN,WAAT,CAAqBuN,OAArB;qBACKrO,QAAL,CAAciO,OAAd,CAAsBE,WAAtB,GAAoCE,OAApC;;;iBAGCrO,QAAL,CAAc6N,QAAd,GAAyBA,QAAzB;sBACU/M,WAAV,CAAsB,KAAKd,QAAL,CAAc6N,QAApC;;;;YAIA,KAAK/T,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrC1C,WAAV,CAAsB0L,SAAS+I,UAAT,CAAoBzgB,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjC1C,WAAV,CAAsB0L,SAAS+I,UAAT,CAAoBzgB,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7B1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;gBACnCwK,SAAS1T,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uBAC/B;aADI,CAAf;;;gBAKM4B,aAAa;qBACV,CADU;sBAET,IAFS;uBAGR,KAAKnH,MAAL,CAAYkU;aAHvB;;;gBAOM3C,QAAQmB,SAAS6I,WAAT,CAAqBvgB,IAArB,CACV,IADU,EAEV,QAFU,EAGVwF,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;qCACFjC,KAAKvJ;aAD5B,CAHU,CAAd;mBAOOqL,WAAP,CAAmBuK,MAAMkE,KAAzB;mBACOzO,WAAP,CAAmBuK,MAAM7P,KAAzB;;iBAEKwE,QAAL,CAAcgO,MAAd,GAAuBA,MAAvB;;sBAEUlN,WAAV,CAAsBkN,MAAtB;;;;YAIA,KAAKlU,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjC1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,KAA6C,CAAClJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAY4T,QAA3B,CAAlD,EAAwF;gBAC9EyB,OAAO7U,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uBAC7B,YAD6B;wBAE5B;aAFC,CAAb;;iBAKKyB,WAAL,CACI0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;8CACbkK,KAAKvJ,EADQ;iCAExB,IAFwB;oDAGPuJ,KAAKvJ,EAHE;iCAIxB;aAJrB,CADJ;;gBASMye,OAAO5Z,MAAM+E,aAAN,CAAoB,MAApB,EAA4B;uBAC9B,uBAD8B;uCAEhBL,KAAKvJ,EAFW;wBAG7B,EAH6B;8DAIOuJ,KAAKvJ,EAJZ;sBAK/B,SAL+B;0BAM3B,CAAC;aANF,CAAb;;gBASM+f,QAAQlb,MAAM+E,aAAN,CAAoB,KAApB,CAAd;;gBAEMoW,OAAOnb,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uCACfL,KAAKvJ,EAA1B,UADoC;8DAEQuJ,KAAKvJ,EAFb;sBAG9B;aAHG,CAAb;;;gBAOM4c,OAAO/X,MAAM+E,aAAN,CAAoB,IAApB,EAA0B;sBAC7B;aADG,CAAb;;;iBAKKvF,MAAL,CAAY4T,QAAZ,CAAqBrN,OAArB,CAA6B,gBAAQ;oBAC3B4T,MAAM3Z,MAAM+E,aAAN,CAAoB,IAApB,EAA0B;0BAC5B,KAD4B;4BAE1B;iBAFA,CAAZ;;oBAKMgQ,SAAS/U,MAAM+E,aAAN,CACX,QADW,EAEX/E,MAAMU,MAAN,CAAaV,MAAMuV,yBAAN,CAAgC,OAAK/V,MAAL,CAAYmT,SAAZ,CAAsBC,OAAtB,CAA8BQ,QAA9D,CAAb,EAAsF;0BAC5E,QAD4E;2BAExE,OAAK5T,MAAL,CAAYsU,UAAZ,CAAuBsB,OAAjC,SAA4C,OAAK5V,MAAL,CAAYsU,UAAZ,CAAuBsB,OAAnE,cAFkF;2CAG7D1Q,KAAKvJ,EAA1B,SAAgCuL,IAAhC,SAHkF;qCAIjE,IAJiE;wDAKhDhC,KAAKvJ,EAAvC,SAA6CuL,IALqC;qCAMjE;iBANrB,CAFW,EAUXoL,KAAKrR,GAAL,CAASiG,IAAT,EAAe,OAAKlH,MAApB,CAVW,CAAf;;oBAaMgI,QAAQxH,MAAM+E,aAAN,CAAoB,MAApB,EAA4B;2BAC/B,OAAKvF,MAAL,CAAYsU,UAAZ,CAAuBe,IAAvB,CAA4BrN;iBADzB,CAAd;;;sBAKM7C,SAAN,GAAkBD,KAAKgC,IAAL,CAAlB;;uBAEOF,WAAP,CAAmBgB,KAAnB;oBACIhB,WAAJ,CAAgBuO,MAAhB;qBACKvO,WAAL,CAAiBmT,GAAjB;;uBAEKjU,QAAL,CAAc0N,QAAd,CAAuB2E,IAAvB,CAA4BrR,IAA5B,IAAoCiT,GAApC;aA9BJ;;iBAiCKnT,WAAL,CAAiBuR,IAAjB;kBACMvR,WAAN,CAAkB2U,IAAlB;;;iBAGK3b,MAAL,CAAY4T,QAAZ,CAAqBrN,OAArB,CAA6B,gBAAQ;oBAC3B+S,OAAO9Y,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;2CACfL,KAAKvJ,EAA1B,SAAgCuL,IADI;4BAE5B,EAF4B;2DAGChC,KAAKvJ,EAA1C,SAAgDuL,IAAhD,SAHoC;0BAI9B,UAJ8B;8BAK1B,CAAC;iBALF,CAAb;;oBAQM0U,OAAOpb,MAAM+E,aAAN,CACT,QADS,EAET;0BACU,QADV;2BAEc,OAAKvF,MAAL,CAAYsU,UAAZ,CAAuBsB,OAAjC,SAA4C,OAAK5V,MAAL,CAAYsU,UAAZ,CAAuBsB,OAAnE,WAFJ;qCAGqB,IAHrB;wDAIsC1Q,KAAKvJ,EAAvC,UAJJ;qCAKqB;iBAPZ,EAST2W,KAAKrR,GAAL,CAASiG,IAAT,EAAe,OAAKlH,MAApB,CATS,CAAb;;qBAYKgH,WAAL,CAAiB4U,IAAjB;;oBAEMrQ,UAAU/K,MAAM+E,aAAN,CAAoB,IAApB,CAAhB;;qBAEKyB,WAAL,CAAiBuE,OAAjB;sBACMvE,WAAN,CAAkBsS,IAAlB;;uBAEKpT,QAAL,CAAc0N,QAAd,CAAuB4E,KAAvB,CAA6BtR,IAA7B,IAAqCoS,IAArC;aA5BJ;;iBA+BKtS,WAAL,CAAiB0U,KAAjB;iBACK1U,WAAL,CAAiBoT,IAAjB;sBACUpT,WAAV,CAAsBqO,IAAtB;;iBAEKnP,QAAL,CAAc0N,QAAd,CAAuBwG,IAAvB,GAA8BA,IAA9B;iBACKlU,QAAL,CAAc0N,QAAd,CAAuByB,IAAvB,GAA8BA,IAA9B;;;;YAIA,KAAKrV,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,KAA9B,KAAwC8B,QAAQkI,GAApD,EAAyD;sBAC3C1M,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,SAA9B,KAA4C8B,QAAQmI,OAAxD,EAAiE;sBACnD3M,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;sBACnC1C,WAAV,CAAsB0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;iBACxCxD,QAAL,CAAcjB,SAAd,CAAwB+B,WAAxB,CAAoC0L,SAAS4I,YAAT,CAAsBtgB,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;;;aAGCkL,QAAL,CAAcwM,QAAd,GAAyBzN,SAAzB;;YAEI,KAAKgM,OAAT,EAAkB;qBACL4K,cAAT,CAAwB7gB,IAAxB,CAA6B,IAA7B,EAAmCyW,MAAMqK,iBAAN,CAAwB9gB,IAAxB,CAA6B,IAA7B,CAAnC;;;iBAGK+gB,YAAT,CAAsB/gB,IAAtB,CAA2B,IAA3B;;eAEOiK,SAAP;KA1zCS;;;;UAAA,oBA8zCJ;;;;YAED,KAAKjF,MAAL,CAAYgc,UAAhB,EAA4B;gBAClBjH,OAAOrC,SAASkC,UAAT,CAAoB5Z,IAApB,CAAyB,IAAzB,CAAb;;;gBAGI+Z,KAAKjC,IAAT,EAAe;sBACLkJ,UAAN,CAAiBjH,KAAKzR,GAAtB,EAA2B,aAA3B;;;;;aAKH3H,EAAL,GAAUqK,KAAKzH,KAAL,CAAWyH,KAAKC,MAAL,KAAgB,KAA3B,CAAV;;;YAGIhB,YAAY,IAAhB;aACKiB,QAAL,CAAcwM,QAAd,GAAyB,IAAzB;;;YAGMuJ,QAAQ;gBACN,KAAKtgB,EADC;sBAEA,KAAKqE,MAAL,CAAYwS,QAFZ;mBAGH,KAAKxS,MAAL,CAAYyS;SAHvB;YAKIzN,SAAS,IAAb;;YAEIxE,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAY0S,QAA5B,KAAyClS,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKxG,MAAL,CAAY0S,QAA7B,CAA7C,EAAqF;;wBAErE,KAAK1S,MAAL,CAAY0S,QAAxB;SAFJ,MAGO,IAAIlS,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAKnL,MAAL,CAAY0S,QAA9B,CAAJ,EAA6C;;;wBAGpC,KAAK1S,MAAL,CAAY0S,QAAZ,CAAqB1X,IAArB,CAA0B,IAA1B,EAAgCihB,KAAhC,CAAZ;SAHG,MAIA;;wBAESvJ,SAASva,MAAT,CAAgB6C,IAAhB,CAAqB,IAArB,EAA2B;oBAC/B,KAAKW,EAD0B;0BAEzB,KAAKqE,MAAL,CAAYwS,QAFa;uBAG5B,KAAKuH,KAHuB;yBAI1B,KAAKtB,OAJqB;0BAKzB5E,SAASuF,QAAT,CAAkBpe,IAAlB,CAAuB,IAAvB;;;aALF,CAAZ;qBASS,KAAT;;;;YAIEyN,UAAU,SAAVA,OAAU,QAAS;gBACjB3C,SAASpE,KAAb;;mBAEOqG,OAAP,CAAekU,KAAf,EAAsB1V,OAAtB,CAA8B,iBAGxB;;oBAFFrG,GAEE;oBADF8H,KACE;;yBACOxH,MAAMgN,UAAN,CAAiB1H,MAAjB,QAA6B5F,GAA7B,QAAqC8H,KAArC,CAAT;aAJJ;;mBAOOlC,MAAP;SAVJ;;;YAcId,MAAJ,EAAY;gBACJxE,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAY0S,QAA5B,CAAJ,EAA2C;4BAC3BjK,QAAQxD,SAAR,CAAZ;aADJ,MAEO,IAAIzE,MAAMC,EAAN,CAAS+F,OAAT,CAAiBvB,SAAjB,CAAJ,EAAiC;0BAC1BE,SAAV,GAAsBsD,QAAQxD,UAAUE,SAAlB,CAAtB;;;;;YAKJoC,eAAJ;;;YAGI/G,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAYmT,SAAZ,CAAsBT,QAAtB,CAA+BzN,SAA/C,CAAJ,EAA+D;qBAClDlQ,SAASgV,aAAT,CAAuB,KAAK/J,MAAL,CAAYmT,SAAZ,CAAsBT,QAAtB,CAA+BzN,SAAtD,CAAT;;;;YAIA,CAACzE,MAAMC,EAAN,CAAS+F,OAAT,CAAiBe,MAAjB,CAAL,EAA+B;qBAClB,KAAKrB,QAAL,CAAcjB,SAAvB;;;;YAIAzE,MAAMC,EAAN,CAAS+F,OAAT,CAAiBvB,SAAjB,CAAJ,EAAiC;mBACtB+B,WAAP,CAAmB/B,SAAnB;SADJ,MAEO,IAAIA,SAAJ,EAAe;mBACXsR,kBAAP,CAA0B,WAA1B,EAAuCtR,SAAvC;;;;YAIA,CAACzE,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAcwM,QAA/B,CAAL,EAA+C;qBAClCwJ,YAAT,CAAsBlhB,IAAtB,CAA2B,IAA3B;;;;YAIAqF,OAAOnB,SAAP,CAAiBC,SAAjB,CAA2BuK,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;kBACvCyS,OAAN,CAAc5U,MAAd;;;;YAIA,KAAKvH,MAAL,CAAYkX,QAAZ,CAAqBxE,QAAzB,EAAmC;gBACzB0J,SAAS5b,MAAM4J,WAAN,CAAkBpP,IAAlB,CACX,IADW,EAEX,CACI,KAAKgF,MAAL,CAAYmT,SAAZ,CAAsBT,QAAtB,CAA+BvM,OADnC,EAEI,GAFJ,EAGI,KAAKnG,MAAL,CAAYmT,SAAZ,CAAsBiJ,MAH1B,EAII,IAJJ,EAKI,KAAKpc,MAAL,CAAYsU,UAAZ,CAAuBvL,MAL3B,EAMEuG,IANF,CAMO,EANP,CAFW,CAAf;;kBAWMjJ,IAAN,CAAW+V,MAAX,EAAmB7V,OAAnB,CAA2B,iBAAS;sBAC1BgR,WAAN,CAAkB9B,KAAlB,EAAyB,OAAKzV,MAAL,CAAYsU,UAAZ,CAAuBvL,MAAhD,EAAwD,KAAxD;sBACMwO,WAAN,CAAkB9B,KAAlB,EAAyB,OAAKzV,MAAL,CAAYsU,UAAZ,CAAuBC,OAAhD,EAAyD,IAAzD;sBACM9O,YAAN,CAAmB,MAAnB,EAA2B,SAA3B;aAHJ;;;CA/6CZ;;ACbA;AACA;AASA,IAAMoO,WAAW;;SAAA,mBAEL;;YAEA,CAAC,KAAK1T,SAAL,CAAemQ,EAApB,EAAwB;;;;;YAKpB,CAAC,KAAKa,OAAN,IAAiB,KAAKkL,SAAtB,IAAoC,KAAKpL,OAAL,IAAgB,CAACzF,QAAQ8Q,UAAjE,EAA8E;;gBAEtE9b,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAK9C,MAAL,CAAY0S,QAA3B,KAAwC,KAAK1S,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAxC,IAAqF,KAAK1J,MAAL,CAAY4T,QAAZ,CAAqBlK,QAArB,CAA8B,UAA9B,CAAzF,EAAoI;yBACvH6S,eAAT,CAAyBvhB,IAAzB,CAA8B,IAA9B;;;;;;;YAOJ,CAACwF,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc2N,QAA/B,CAAL,EAA+C;iBACtC3N,QAAL,CAAc2N,QAAd,GAAyBrT,MAAM+E,aAAN,CAAoB,KAApB,EAA2B/E,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBU,QAAtD,CAA3B,CAAzB;;kBAEM2I,WAAN,CAAkB,KAAKtW,QAAL,CAAc2N,QAAhC,EAA0C,KAAK3N,QAAL,CAAcC,OAAxD;;;;YAIEoK,UAAU/P,MAAMgQ,UAAN,EAAhB;;;;YAIID,QAAQyC,IAAR,IAAgB3S,OAAOsS,GAA3B,EAAgC;gBACtBzM,WAAW,KAAK8K,KAAL,CAAWvH,gBAAX,CAA4B,OAA5B,CAAjB;;kBAEMpD,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,iBAAS;oBAC5BpC,MAAMwV,MAAM5N,YAAN,CAAmB,KAAnB,CAAZ;oBACM4C,OAAOnO,MAAMsO,QAAN,CAAe3K,GAAf,CAAb;;oBAEIwK,KAAK8N,QAAL,KAAkBpc,OAAOwS,QAAP,CAAgBlE,IAAhB,CAAqB8N,QAAvC,IAAmD,CACnD,OADmD,EAEnD,QAFmD,EAGrD/S,QAHqD,CAG5CiF,KAAK+N,QAHuC,CAAvD,EAG2B;0BAElB9W,KADL,CACWzB,GADX,EACgB,MADhB,EAEK0B,IAFL,CAEU,gBAAQ;8BACJJ,YAAN,CAAmB,KAAnB,EAA0BpF,OAAOsS,GAAP,CAAWgK,eAAX,CAA2BC,IAA3B,CAA1B;qBAHR,EAKK7W,KALL,CAKW,YAAM;8BACHyB,aAAN,CAAoBmS,KAApB;qBANR;;aARR;;;;YAqBAC,SAAS,KAAK3Z,OAAL,CAAagB,GAAb,CAAiB,UAAjB,CAAb;;;YAGI,CAACT,MAAMC,EAAN,CAASuI,OAAT,CAAiB4Q,MAAjB,CAAL,EAA+B;kBAAA,GACb,KAAK5Z,MAAL,CAAY6T,QADC,CACxB+F,MADwB;;;;YAK3BC,WAAW,KAAK5Z,OAAL,CAAagB,GAAb,CAAiB,UAAjB,KAAgC,KAAKjB,MAAL,CAAY6T,QAAZ,CAAqBgG,QAApE;YACIA,aAAa,MAAjB,EAAyB;yBACN,CAAC3a,UAAU2a,QAAV,IAAsB3a,UAAU2d,YAAjC,EAA+CzU,KAA/C,CAAqD,GAArD,CADM;;;;oBAAA;;;iBAIhB0U,WAAT,CAAqB9hB,IAArB,CAA0B,IAA1B,EAAgC6e,QAAhC,EAA0CD,MAA1C;;;YAGI,KAAK3I,OAAT,EAAkB;gBACR8L,cAAc,KAAK/c,MAAL,CAAY6T,QAAZ,CAAqB7O,MAArB,GAA8B,sBAA9B,GAAuD,aAA3E;kBACM8F,EAAN,CAAS,KAAKkG,KAAL,CAAWsL,UAApB,EAAgCS,WAAhC,EAA6ClJ,SAAS7O,MAAT,CAAgBhJ,IAAhB,CAAqB,IAArB,CAA7C;;;;mBAIO6X,SAAS7O,MAAT,CAAgBhJ,IAAhB,CAAqB,IAArB,CAAX,EAAuC,CAAvC;KA5ES;UAAA,oBA+EJ;;;YACCyd,SAAS5F,SAAS6F,SAAT,CAAmB1e,IAAnB,CAAwB,IAAxB,EAA8B,IAA9B,CAAf;;wBAE2B,KAAK6Y,QAH3B;YAGGgG,QAHH,aAGGA,QAHH;YAGaxe,IAHb,aAGaA,IAHb;;;;YAMD,KAAK4V,OAAL,IAAgB,KAAKE,OAAzB,EAAkC;mBAEzBrD,MADL,CACY;uBAAS,CAACzS,KAAK4F,GAAL,CAAS0Y,KAAT,CAAV;aADZ,EAEKpT,OAFL,CAEa,iBAAS;sBACT6L,KAAL,CAAWC,GAAX,CAAe,aAAf,EAA8BsH,KAA9B;;qBAEKqD,GAAL,CAASrD,KAAT,EAAgB;6BACHA,MAAMsD,IAAN,KAAe;iBAD5B;;;sBAKMA,IAAN,GAAa,QAAb;;;sBAGMnS,EAAN,CAAS6O,KAAT,EAAgB,WAAhB,EAA6B;2BAAM9F,SAASqJ,UAAT,CAAoBliB,IAApB,CAAyB,KAAzB,CAAN;iBAA7B;aAbR;;;YAiBEmiB,eAAe,CAAC1D,OAAOtM,IAAP,CAAY;mBAASwM,UAAU,MAAK9F,QAAL,CAAcuJ,gBAAjC;SAAZ,CAAtB;YACMC,aAAa,KAAKxD,QAAL,KAAkBA,QAAlB,IAA8BJ,OAAOtM,IAAP,CAAY;mBAASwM,MAAME,QAAN,KAAmBA,QAA5B;SAAZ,CAAjD;;;YAGIsD,gBAAgBE,UAApB,EAAgC;qBACnBP,WAAT,CAAqB9hB,IAArB,CAA0B,IAA1B,EAAgC6e,QAAhC,EAA0C,KAAK7Z,MAAL,CAAY6T,QAAZ,CAAqB+F,MAA/D;;;;cAIErC,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBT,QAAvB,CAAgC9T,OAA3E,EAAoF,CAACS,MAAMC,EAAN,CAASC,KAAT,CAAe+Y,MAAf,CAArF;;;YAGI,CAAC,KAAKzZ,MAAL,CAAY0S,QAAZ,IAAwB,EAAzB,EAA6BhJ,QAA7B,CAAsC,UAAtC,KAAqD,KAAK1J,MAAL,CAAY4T,QAAZ,CAAqBlK,QAArB,CAA8B,UAA9B,CAAzD,EAAoG;qBACvF6S,eAAT,CAAyBvhB,IAAzB,CAA8B,IAA9B;;KApHK;OAAA,eAwHTyL,KAxHS,EAwH+B;YAAjCqW,WAAiC,uEAAnB,IAAmB;YAAbzC,IAAa,uEAAN,IAAM;;YAClCZ,SAAS5F,SAAS6F,SAAT,CAAmB1e,IAAnB,CAAwB,IAAxB,CAAf;;;YAGIyL,UAAU,CAAC,CAAf,EAAkB;iBACT6W,cAAL,CAAoB,KAApB;;;;YAIA,CAAC9c,MAAMC,EAAN,CAASgM,MAAT,CAAgBhG,KAAhB,CAAL,EAA6B;iBACpB2L,KAAL,CAAWqC,IAAX,CAAgB,0BAAhB,EAA4ChO,KAA5C;;;;YAIA,EAAEA,SAASgT,MAAX,CAAJ,EAAwB;iBACfrH,KAAL,CAAWqC,IAAX,CAAgB,iBAAhB,EAAmChO,KAAnC;;;;YAIA,KAAKoN,QAAL,CAAc0F,YAAd,KAA+B9S,KAAnC,EAA0C;iBACjCoN,QAAL,CAAc0F,YAAd,GAA6B9S,KAA7B;gBACMkT,QAAQ9F,SAAS0J,eAAT,CAAyBviB,IAAzB,CAA8B,IAA9B,CAAd;;uBACqB2e,SAAS,EAHQ;gBAG9BE,QAH8B,QAG9BA,QAH8B;;;;;iBAMjChG,QAAL,CAAcuJ,gBAAd,GAAiCzD,KAAjC;;;gBAGImD,WAAJ,EAAiB;qBACRjJ,QAAL,CAAcgG,QAAd,GAAyBA,QAAzB;;;;gBAIA,KAAKG,OAAT,EAAkB;qBACTwD,KAAL,CAAWC,eAAX,CAA2B5D,QAA3B;;;;kBAIEjO,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2C,gBAA3C;;;YAGA,KAAKC,OAAL,IAAgB,KAAKE,OAAzB,EAAkC;;qBAErB+L,UAAT,CAAoBliB,IAApB,CAAyB,IAAzB;;;;YAIAqf,IAAJ,EAAU;iBACDiD,cAAL,CAAoB,IAApB;;KAxKK;eAAA,uBA4KDzD,QA5KC,EA4KsB;YAAbQ,IAAa,uEAAN,IAAM;;YAC3B,CAAC7Z,MAAMC,EAAN,CAASK,MAAT,CAAgB+Y,QAAhB,CAAL,EAAgC;iBACvBzH,KAAL,CAAWqC,IAAX,CAAgB,2BAAhB,EAA6CoF,QAA7C;;;;aAIChG,QAAL,CAAcgG,QAAd,GAAyBA,SAAStM,WAAT,EAAzB;;;YAGMkM,SAAS5F,SAAS6F,SAAT,CAAmB1e,IAAnB,CAAwB,IAAxB,CAAf;YACM2e,QAAQ9F,SAAS0J,eAAT,CAAyBviB,IAAzB,CAA8B,IAA9B,EAAoC,IAApC,CAAd;iBACSgiB,GAAT,CAAahiB,IAAb,CAAkB,IAAlB,EAAwBye,OAAOzL,OAAP,CAAe2L,KAAf,CAAxB,EAA+C,KAA/C,EAAsDU,IAAtD;KAvLS;;;;;;aAAA,uBA6La;;;YAAhBrV,MAAgB,uEAAP,KAAO;;;YAEhByU,SAAStX,MAAMkE,IAAN,CAAW,CAAC,KAAK2K,KAAL,IAAc,EAAf,EAAmBsL,UAAnB,IAAiC,EAA5C,CAAf;;;eAGO7C,OACF3L,MADE,CACK;mBAAS,CAAC,OAAKmD,OAAN,IAAiBjM,MAAjB,IAA2B,OAAK6O,QAAL,CAAcxY,IAAd,CAAmB9F,GAAnB,CAAuBokB,KAAvB,CAApC;SADL,EAEF7L,MAFE,CAEK;mBAAS,CACb,UADa,EAEb,WAFa,EAGfpE,QAHe,CAGNiQ,MAAM9W,IAHA,CAAT;SAFL,CAAP;KAlMS;;;;mBAAA,6BA2MyB;;;YAAtB6a,YAAsB,uEAAP,KAAO;;YAC5BjE,SAAS5F,SAAS6F,SAAT,CAAmB1e,IAAnB,CAAwB,IAAxB,CAAf;YACM2iB,gBAAgB,SAAhBA,aAAgB;mBAAS9b,OAAO,CAAC,OAAKgS,QAAL,CAAcxY,IAAd,CAAmB4F,GAAnB,CAAuB0Y,KAAvB,KAAiC,EAAlC,EAAsCH,OAA7C,CAAT;SAAtB;YACMoE,SAASzb,MAAMkE,IAAN,CAAWoT,MAAX,EAAmBV,IAAnB,CAAwB,UAACC,CAAD,EAAIC,CAAJ;mBAAU0E,cAAc1E,CAAd,IAAmB0E,cAAc3E,CAAd,CAA7B;SAAxB,CAAf;eACQ,CAAC0E,YAAD,IAAiBjE,OAAO,KAAKF,YAAZ,CAAlB,IAAgDqE,OAAOzQ,IAAP,CAAY;mBAASwM,MAAME,QAAN,KAAmB,OAAKhG,QAAL,CAAcgG,QAA1C;SAAZ,CAAhD,IAAmH+D,OAAO,CAAP,CAA1H;KA/MS;;;;YAAA,oBAmNJjE,KAnNI,EAmNG;YACRJ,eAAeI,KAAnB;;YAEI,CAACnZ,MAAMC,EAAN,CAASkZ,KAAT,CAAeJ,YAAf,CAAD,IAAiC/N,QAAQ8Q,UAAzC,IAAuD,KAAKzI,QAAL,CAAc+F,MAAzE,EAAiF;2BAC9D/F,SAAS0J,eAAT,CAAyBviB,IAAzB,CAA8B,IAA9B,CAAf;;;YAGAwF,MAAMC,EAAN,CAASkZ,KAAT,CAAeJ,YAAf,CAAJ,EAAkC;gBAC1B,CAAC/Y,MAAMC,EAAN,CAASC,KAAT,CAAe6Y,aAAa9D,KAA5B,CAAL,EAAyC;uBAC9B8D,aAAa9D,KAApB;;;gBAGA,CAACjV,MAAMC,EAAN,CAASC,KAAT,CAAe6Y,aAAaM,QAA5B,CAAL,EAA4C;uBACjCF,MAAME,QAAN,CAAexM,WAAf,EAAP;;;mBAGGiF,KAAKrR,GAAL,CAAS,SAAT,EAAoB,KAAKjB,MAAzB,CAAP;;;eAGGsS,KAAKrR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B,CAAP;KAtOS;;;;;cAAA,sBA2OF0B,KA3OE,EA2OK;;YAEV,CAAC,KAAKvB,SAAL,CAAemQ,EAApB,EAAwB;;;;YAIpB,CAAC9P,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAc2N,QAA/B,CAAL,EAA+C;iBACtCzB,KAAL,CAAWqC,IAAX,CAAgB,kCAAhB;;;;;YAKA,CAACjU,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,IAAoC,CAACS,MAAMnK,OAAN,CAAc0J,KAAd,CAAzC,EAA+D;iBACtD0Q,KAAL,CAAWqC,IAAX,CAAgB,2BAAhB,EAA6C/S,KAA7C;;;;YAIAmc,OAAOnc,KAAX;;;YAGI,CAACmc,IAAL,EAAW;gBACDlE,QAAQ9F,SAAS0J,eAAT,CAAyBviB,IAAzB,CAA8B,IAA9B,CAAd;mBACOmH,MAAMkE,IAAN,CAAW,CAACsT,SAAS,EAAV,EAAcmE,UAAd,IAA4B,EAAvC,EACF1O,GADE,CACE;uBAAO2O,IAAIC,YAAJ,EAAP;aADF,EAEF5O,GAFE,CAEE5O,MAAMyd,OAFR,CAAP;;;;YAMEtY,UAAUkY,KAAKzO,GAAL,CAAS;mBAAW8O,QAAQ3V,IAAR,EAAX;SAAT,EAAoC+G,IAApC,CAAyC,IAAzC,CAAhB;YACM6O,UAAUxY,YAAY,KAAKO,QAAL,CAAc2N,QAAd,CAAuB1O,SAAnD;;YAEIgZ,OAAJ,EAAa;;kBAEHvF,YAAN,CAAmB,KAAK1S,QAAL,CAAc2N,QAAjC;gBACMuK,UAAU5d,MAAM+E,aAAN,CAAoB,MAApB,EAA4B/E,MAAMuV,yBAAN,CAAgC,KAAK/V,MAAL,CAAYmT,SAAZ,CAAsBiL,OAAtD,CAA5B,CAAhB;oBACQjZ,SAAR,GAAoBQ,OAApB;iBACKO,QAAL,CAAc2N,QAAd,CAAuB7M,WAAvB,CAAmCoX,OAAnC;;;kBAGMxS,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2C,WAA3C;;;CAlRZ;;ACVA;;;;AAIA,IAAMqN,OAAO,SAAPA,IAAO,GAAM,EAAnB;;IAEqBC;uBACY;YAAjBve,OAAiB,uEAAP,KAAO;;;aACpBA,OAAL,GAAeM,OAAOke,OAAP,IAAkBxe,OAAjC;;YAEI,KAAKA,OAAT,EAAkB;iBACTsS,GAAL,CAAS,mBAAT;;;;;;4BAIE;;mBAEC,KAAKtS,OAAL,GAAekC,SAASsH,SAAT,CAAmBvN,IAAnB,CAAwBhB,IAAxB,CAA6BujB,QAAQlM,GAArC,EAA0CkM,OAA1C,CAAf,GAAoEF,IAA3E;;;;4BAEO;;mBAEA,KAAKte,OAAL,GAAekC,SAASsH,SAAT,CAAmBvN,IAAnB,CAAwBhB,IAAxB,CAA6BujB,QAAQ9J,IAArC,EAA2C8J,OAA3C,CAAf,GAAqEF,IAA5E;;;;4BAEQ;;mBAED,KAAKte,OAAL,GAAekC,SAASsH,SAAT,CAAmBvN,IAAnB,CAAwBhB,IAAxB,CAA6BujB,QAAQ/J,KAArC,EAA4C+J,OAA5C,CAAf,GAAsEF,IAA7E;;;;;;ACzBR;;;;AAIA,IAAMG,aAAW;;aAEJ,IAFI;;;WAKN,EALM;;;WAQN,KARM;;;cAWH,KAXG;;;eAcF,IAdE;;;cAiBH,EAjBG;;;YAoBL,CApBK;WAqBN,KArBM;;;cAwBH,IAxBG;;;;qBA4BI,IA5BJ;;;gBA+BD,IA/BC;;;kBAkCC,IAlCD;;;WAqCN,MArCM;;;iBAwCA,IAxCA;;;kBA2CC,IA3CD;;;gBA8CD,KA9CC;;;wBAiDO,IAjDP;;;gBAoDD,IApDC;gBAqDD,MArDC;aAsDJ,qCAtDI;;;gBAyDD,sCAzDC;;;aA4DJ;iBACI,GADJ;iBAEI,CACL,IADK,EAEL,IAFK,EAGL,IAHK,EAIL,IAJK,EAKL,IALK,EAML,GANK,EAOL,GAPK,EAQL,GARK,EASL,GATK,EAUL,GAVK,EAWL,SAXK;KA9DA;;;UA8EP;gBACM;;;KA/EC;;;WAqFN;kBACO,CADP;iBAEM,CACL,GADK,EAEL,IAFK,EAGL,CAHK,EAIL,IAJK,EAKL,GALK,EAML,IANK,EAOL,CAPK;KAvFA;;;cAmGH;iBACG,IADH;gBAEE;KArGC;;;cAyGH;kBACI,KADJ;cAEA;KA3GG;;;cA+GH;gBACE,KADF;kBAEI,MAFJ;;;gBAKE;KApHC;;;gBAwHD;iBACC,IADD;kBAEE,IAFF;mBAGG,KAHH;KAxHC;;;aA+HJ;iBACI,IADJ;aAEA;KAjII;;;cAqIH,CACN,YADM;;;UAAA;;cAAA,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM,EAcN,YAdM,CArIG;cAqJH,CACN,UADM,EAEN,SAFM,EAGN,OAHM,CArJG;;;UA4JP;iBACO,SADP;gBAEM,oBAFN;cAGI,MAHJ;eAIK,OAJL;qBAKW,qBALX;cAMI,MANJ;gBAOM,QAPN;kBAQQ,UARR;qBASW,cATX;kBAUQ,UAVR;gBAWM,QAXN;cAYI,MAZJ;gBAaM,QAbN;wBAcc,iBAdd;yBAee,kBAff;yBAgBe,kBAhBf;wBAiBc,iBAjBd;oBAkBU,oBAlBV;kBAmBQ,UAnBR;kBAoBQ,UApBR;eAqBK,OArBL;gBAsBM,QAtBN;iBAuBO,SAvBP;cAwBI,MAxBJ;eAyBK,OAzBL;aA0BG,KA1BH;aA2BG,KA3BH;eA4BK,OA5BL;kBA6BQ,UA7BR;iBA8BO,SA9BP;uBA+Ba,IA/Bb;sBAgCY;kBACJ,IADI;kBAEJ,IAFI;kBAGJ,IAHI;iBAIL,IAJK;iBAKL,IALK;iBAML;;KAlMA;;;UAuMP;eACK;iBACE,wCADF;oBAEK,wCAFL;iBAGE;SAJP;iBAMO;iBACA,oCADA;iBAEA;SARP;mBAUS;iBACF;;KAlNA;;;eAuNF;cACD,IADC;cAED,IAFC;eAGA,IAHA;iBAIE,IAJF;gBAKC,IALD;qBAMM,IANN;cAOD,IAPC;gBAQC,IARD;kBASG,IATH;oBAUK,IAVL;aAWF,IAXE;iBAYE,IAZF;eAaA,IAbA;iBAcE,IAdF;cAeD,IAfC;kBAgBG;KAvOD;;;YA2OL;;;WAAA,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;;;qBAAA,EA0BJ,gBA1BI,EA2BJ,iBA3BI,EA4BJ,kBA5BI,EA6BJ,gBA7BI,EA8BJ,gBA9BI,EA+BJ,eA/BI,EAgCJ,OAhCI;;;iBAAA,EAoCJ,eApCI,EAqCJ,kBArCI;;;eAAA,EAyCJ,iBAzCI,EA0CJ,kBA1CI,EA2CJ,WA3CI,EA4CJ,aA5CI,EA6CJ,aA7CI,EA8CJ,gBA9CI,EA+CJ,eA/CI,EAgDJ,UAhDI,CA3OK;;;;eAgSF;kBACG,4CADH;mBAEI,OAFJ;kBAGG;uBACK,IADL;qBAEG;SALN;gBAOC,aAPD;iBAQE;kBACC,oBADD;mBAEE,qBAFF;qBAGI,uBAHJ;oBAIG,sBAJH;yBAKQ,4BALR;kBAMC,oBAND;sBAOK,wBAPL;wBAQO,0BARP;iBASA,mBATA;qBAUI,uBAVJ;sBAWK,wBAXL;kBAYC;SApBH;gBAsBC;kBACE,oBADF;oBAEI,sBAFJ;mBAGG,qBAHH;sBAIM,wBAJN;qBAKK;SA3BN;iBA6BE;yBACQ,sBADR;sBAEK,uBAFL;oBAGG,yBAHH;kBAIC,uBAJD;oBAKG;SAlCL;kBAoCG,iBApCH;kBAqCG,iBArCH;iBAsCE,gBAtCF;cAuCD;qBACO;;KAxUJ;;;gBA6UD;cACF,WADE;kBAEE,WAFF;eAGD,qBAHC;eAID,mBAJC;wBAKQ,8BALR;gBAMA,cANA;uBAOO,sBAPP;aAQH,WARG;iBASC,eATD;iBAUC,eAVD;gBAWA,cAXA;iBAYC,eAZD;iBAaC,eAbD;eAcD,aAdC;iBAeC,eAfD;cAgBF,YAhBE;gBAiBA,eAjBA;sBAkBM,qBAlBN;eAmBD,cAnBC;iBAoBC,gBApBD;qBAqBK,eArBL;sBAsBM,qBAtBN;cAuBF;mBACK,mBADL;mBAEK,aAFL;kBAGI;SA1BF;kBA4BE;qBACG,wBADH;oBAEE;SA9BJ;oBAgCI;qBACC,0BADD;sBAEE;SAlCN;aAoCH;uBACU,qBADV;oBAEO;SAtCJ;iBAwCC;uBACM,yBADN;oBAEG;SA1CJ;kBA4CE;KAzXD;;;gBA6XD;eACD;sBACO,oBADP;gBAEC;;KAhYC;;;UAqYP;gBACM;KAtYC;;;;SA2YR;iBACQ,KADR;qBAEY;;CA7YrB;;ACJA;AACA;AAMA,IAAMjO,YAAU/P,MAAMgQ,UAAN,EAAhB;;AAEA,SAASiO,QAAT,GAAoB;QACZ,CAAC,KAAK1e,OAAV,EAAmB;;;;;QAKbwV,SAAS,KAAKzV,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BU,UAA5C;QACItT,MAAMC,EAAN,CAAS+F,OAAT,CAAiB+O,MAAjB,CAAJ,EAA8B;cACpB1J,WAAN,CAAkB0J,MAAlB,EAA0B,KAAKqE,MAA/B;;;;UAIEhO,aAAN,CAAoB5Q,IAApB,CAAyB,KAAK8E,MAA9B,EAAsC,KAAKyH,MAA3C,EAAmD,KAAKqS,MAAL,GAAc,iBAAd,GAAkC,gBAArF,EAAuG,IAAvG;;;QAGI,CAACrJ,UAAQmO,KAAb,EAAoB;cACVC,SAAN,CAAgB3jB,IAAhB,CAAqB,KAAK8E,MAA1B,EAAkC,KAAKyH,MAAvC,EAA+C,KAAKqS,MAApD;;;;AAIR,SAASgF,cAAT,GAAwC;QAAhB1U,MAAgB,uEAAP,KAAO;;;QAEhCA,MAAJ,EAAY;aACH2U,cAAL,GAAsB;eACfxe,OAAOye,OAAP,IAAkB,CADH;eAEfze,OAAO0e,OAAP,IAAkB;SAFzB;KADJ,MAKO;eACIC,QAAP,CAAgB,KAAKH,cAAL,CAAoBI,CAApC,EAAuC,KAAKJ,cAAL,CAAoBK,CAA3D;;;;aAIK9Z,IAAT,CAAchC,KAAd,CAAoB+b,QAApB,GAA+BjV,SAAS,QAAT,GAAoB,EAAnD;;;UAGMqN,WAAN,CAAkB,KAAKhQ,MAAvB,EAA+B,KAAKzH,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BR,UAA9B,CAAyCsL,QAAxE,EAAkFlV,MAAlF;;;aAGSlP,IAAT,CAAc,IAAd;;;IAGEqkB;wBACUvf,MAAZ,EAAoB;;;;;;aAEXA,MAAL,GAAcA,MAAd;;;aAGK6E,MAAL,GAAc0a,WAAW1a,MAAzB;aACK2a,QAAL,GAAgBD,WAAWC,QAA3B;;;aAGKT,cAAL,GAAsB,EAAEI,GAAG,CAAL,EAAQC,GAAG,CAAX,EAAtB;;;;cAIMpU,EAAN,CAAS/V,QAAT,EAAmB,KAAK4P,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,GAAiD,KAAKA,MAAtD,qBAAnB,EAAmG,YAAM;;qBAE5F3J,IAAT,CAAc,KAAd;SAFJ;;;cAMM8P,EAAN,CAAS,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;;gBAEtDzE,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,MAAK1G,MAAL,CAAYoG,QAAZ,CAAqBwM,QAAtC,KAAmD,MAAK5S,MAAL,CAAYoG,QAAZ,CAAqBwM,QAArB,CAA8BpJ,QAA9B,CAAuCkB,MAAMjD,MAA7C,CAAvD,EAA6G;;;;kBAIxG2C,MAAL;SANJ;;;aAUKlF,MAAL;;;;;;;;;;;iCAuEK;gBACD,KAAKjF,OAAT,EAAkB;qBACTD,MAAL,CAAYsS,KAAZ,CAAkBC,GAAlB,EAAyBgN,WAAWE,MAAX,GAAoB,QAApB,GAA+B,UAAxD;aADJ,MAEO;qBACEzf,MAAL,CAAYsS,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;;;;kBAIEkF,WAAN,CAAkB,KAAKzX,MAAL,CAAYoG,QAAZ,CAAqBjB,SAAvC,EAAkD,KAAKnF,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BR,UAA9B,CAAyC/T,OAA3F,EAAoG,KAAKA,OAAzG;;;;;;;gCAII;gBACA,CAAC,KAAKA,OAAV,EAAmB;;;;;gBAKfwQ,UAAQmO,KAAR,IAAiB,KAAK5e,MAAL,CAAYE,MAAZ,CAAmB8T,UAAnB,CAA8B0L,SAAnD,EAA8D;oBACtD,KAAK1f,MAAL,CAAYiS,OAAhB,EAAyB;yBAChBxK,MAAL,CAAYkY,qBAAZ;;aAFR,MAIO,IAAI,CAACJ,WAAWE,MAAhB,EAAwB;+BACZvkB,IAAf,CAAoB,IAApB,EAA0B,IAA1B;aADG,MAEA,IAAI,CAAC,KAAK2J,MAAV,EAAkB;qBAChB4C,MAAL,CAAYmY,iBAAZ;aADG,MAEA,IAAI,CAAClf,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKiE,MAApB,CAAL,EAAkC;qBAChC4C,MAAL,CAAe,KAAK5C,MAApB,eAAoC,KAAK2a,QAAzC;;;;;;;;+BAKD;gBACC,CAAC,KAAKvf,OAAV,EAAmB;;;;;gBAKfwQ,UAAQmO,KAAR,IAAiB,KAAK5e,MAAL,CAAYE,MAAZ,CAAmB8T,UAAnB,CAA8B0L,SAAnD,EAA8D;qBACrDjY,MAAL,CAAYoY,oBAAZ;qBACK7f,MAAL,CAAYoS,IAAZ;aAFJ,MAGO,IAAI,CAACmN,WAAWE,MAAhB,EAAwB;+BACZvkB,IAAf,CAAoB,IAApB,EAA0B,KAA1B;aADG,MAEA,IAAI,CAAC,KAAK2J,MAAV,EAAkB;iBACpB5P,SAAS6qB,gBAAT,IAA6B7qB,SAAS8qB,cAAvC,EAAuD7kB,IAAvD,CAA4DjG,QAA5D;aADG,MAEA,IAAI,CAACyL,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKiE,MAApB,CAAL,EAAkC;oBAC/Bmb,SAAS,KAAKnb,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;8BACY,KAAKA,MAAjB,GAA0Bmb,MAA1B,GAAmC,KAAKR,QAAxC;;;;;;;;iCAKC;gBACD,CAAC,KAAK1F,MAAV,EAAkB;qBACTmG,KAAL;aADJ,MAEO;qBACEC,IAAL;;;;;;;;4BAvFM;mBAEN,CAACX,WAAWE,MAAX,IAAqB,KAAKzf,MAAL,CAAYE,MAAZ,CAAmB8T,UAAnB,CAA8BsL,QAApD,KACA,KAAKtf,MAAL,CAAYE,MAAZ,CAAmB8T,UAAnB,CAA8B/T,OAD9B,IAEA,KAAKD,MAAL,CAAYK,SAAZ,CAAsBmQ,EAFtB,IAGA,KAAKxQ,MAAL,CAAYqR,OAJhB;;;;;;;4BASS;gBACL,CAAC,KAAKpR,OAAV,EAAmB;uBACR,KAAP;;;;gBAIA,CAACsf,WAAWE,MAAhB,EAAwB;uBACb/e,MAAMmX,QAAN,CAAe,KAAKpQ,MAApB,EAA4B,KAAKzH,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BR,UAA9B,CAAyCsL,QAArE,CAAP;;;gBAGE5Y,UAAU,CAAC,KAAK7B,MAAN,GAAe5P,SAASkrB,iBAAxB,GAA4ClrB,cAAY,KAAK4P,MAAjB,GAA0B,KAAK2a,QAA/B,aAA5D;;mBAEO9Y,YAAY,KAAKe,MAAxB;;;;;;;4BAIS;mBACFgJ,UAAQmO,KAAR,IAAiB,KAAK5e,MAAL,CAAYE,MAAZ,CAAmB8T,UAAnB,CAA8B0L,SAA/C,GAA2D,KAAK1f,MAAL,CAAYkR,KAAvE,GAA+E,KAAKlR,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA3G;;;;4BA/DgB;mBACT,CAAC,EAAElQ,SAASmrB,iBAAT,IAA8BnrB,SAASorB,uBAAvC,IAAkEprB,SAASqrB,oBAA3E,IAAmGrrB,SAASsrB,mBAA9G,CAAR;;;;;;;4BAIgB;;gBAEZ7f,MAAMC,EAAN,CAAS0K,QAAT,CAAkBpW,SAAS8qB,cAA3B,CAAJ,EAAgD;uBACrC,EAAP;;;;gBAIA7X,QAAQ,EAAZ;gBACMsY,WAAW,CACb,QADa,EAEb,KAFa,EAGb,IAHa,CAAjB;;qBAMSpG,IAAT,CAAc,eAAO;oBACb1Z,MAAMC,EAAN,CAAS0K,QAAT,CAAkBpW,SAAYwrB,GAAZ,oBAAlB,KAAuD/f,MAAMC,EAAN,CAAS0K,QAAT,CAAkBpW,SAAYwrB,GAAZ,sBAAlB,CAA3D,EAAkH;4BACtGA,GAAR;2BACO,IAAP;;;uBAGG,KAAP;aANJ;;mBASOvY,KAAP;;;;4BAGkB;mBACX,KAAKrD,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;;;;;;ACpHR;AACA;;AAUA,IAAM4L,YAAU/P,MAAMgQ,UAAN,EAAhB;;AAEA,IAAMF,KAAK;gBAAA,0BACQ;cACLiH,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYmT,SAAZ,CAAsBlO,SAAtB,CAAgCwD,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAA3C,EAA6F,IAA7F;cACM8O,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBkM,WAAlE,EAA+E,KAAKrgB,SAAL,CAAemQ,EAA9F;KAHG;;;;wBAAA,kCAO8B;YAAhBpG,MAAgB,uEAAP,KAAO;;YAC7BA,UAAU,KAAK+G,OAAnB,EAA4B;iBACnBD,KAAL,CAAWvL,YAAX,CAAwB,UAAxB,EAAoC,EAApC;SADJ,MAEO;iBACEuL,KAAL,CAAW9H,eAAX,CAA2B,UAA3B;;KAXD;;;;SAAA,mBAgBC;;;;;aAGCuX,SAAL,CAAezP,KAAf;;;YAGI,CAAC,KAAK7Q,SAAL,CAAemQ,EAApB,EAAwB;iBACf8B,KAAL,CAAWqC,IAAX,6BAA0C,KAAKtE,QAA/C,SAA2D,KAAKjJ,IAAhE;;;eAGGwN,oBAAH,CAAwB1Z,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;;;;;;YAOA,CAACwF,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAcwM,QAA/B,CAAL,EAA+C;;qBAElCgO,MAAT,CAAgB1lB,IAAhB,CAAqB,IAArB;;;iBAGKylB,SAAL,CAAe/N,QAAf;;;;WAIDgC,oBAAH,CAAwB1Z,IAAxB,CAA6B,IAA7B;;;YAGI,KAAKiW,OAAT,EAAkB;qBACL0P,KAAT,CAAe3lB,IAAf,CAAoB,IAApB;;;;aAICkZ,MAAL,GAAc,IAAd;;;aAGKwC,KAAL,GAAa,IAAb;;;aAGKqD,KAAL,GAAa,IAAb;;;aAGK6G,IAAL,GAAY,IAAZ;;;aAGKnI,OAAL,GAAe,IAAf;;;iBAGSoI,YAAT,CAAsB7lB,IAAtB,CAA2B,IAA3B;;;iBAGS8lB,UAAT,CAAoB9lB,IAApB,CAAyB,IAAzB;;;WAGG+lB,YAAH,CAAgB/lB,IAAhB,CAAqB,IAArB;;;cAGMuc,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBZ,GAAvB,CAA2BvT,SAAtE,EAAiFqL,QAAQkI,GAAR,IAAe,KAAKzC,OAApB,IAA+B,KAAKE,OAArH;;;cAGMoG,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBX,OAAvB,CAA+BxT,SAA1E,EAAqFqL,QAAQmI,OAAR,IAAmB,KAAK1C,OAA7G;;;cAGMsG,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBoK,KAAlE,EAAyEnO,UAAQmO,KAAjF;;;cAGMnH,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuB0M,OAAlE,EAA2E,KAAKxJ,KAAhF;;;aAGKyJ,KAAL,GAAa,IAAb;;;mBAGW,YAAM;kBACPrV,aAAN,CAAoB5Q,IAApB,CAAyB,KAAzB,EAA+B,MAAKgW,KAApC,EAA2C,OAA3C;SADJ,EAEG,CAFH;;;WAKGkQ,QAAH,CAAYlmB,IAAZ,CAAiB,IAAjB;;;YAGI,KAAKmmB,MAAL,IAAe,KAAKjb,QAAL,CAAcib,MAA7B,IAAuC,CAAC,KAAKjb,QAAL,CAAcib,MAAd,CAAqB/d,KAArB,CAA2Bge,eAAvE,EAAwF;eACjFC,SAAH,CAAarmB,IAAb,CAAkB,IAAlB,EAAwB,KAAKmmB,MAA7B;;;;;YAKA,KAAKnhB,MAAL,CAAYoU,QAAhB,EAA0B;qBACbkN,cAAT,CAAwBtmB,IAAxB,CAA6B,IAA7B;;KAxGD;;;;YAAA,sBA6GI;;YAEHya,QAAQnD,KAAKrR,GAAL,CAAS,MAAT,EAAiB,KAAKjB,MAAtB,CAAZ;;;YAGIQ,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAYyS,KAA5B,KAAsC,CAACjS,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYyS,KAA3B,CAA3C,EAA8E;4BAC5D,KAAKzS,MAAL,CAAYyS,KAA1B;;;iBAGKvM,QAAL,CAAcjB,SAAd,CAAwBQ,YAAxB,CAAqC,YAArC,EAAmD,KAAKzF,MAAL,CAAYyS,KAA/D;;;;YAIAjS,MAAMC,EAAN,CAASsC,QAAT,CAAkB,KAAKmD,QAAL,CAAckN,OAAd,CAAsBlB,IAAxC,CAAJ,EAAmD;kBACzC7L,IAAN,CAAW,KAAKH,QAAL,CAAckN,OAAd,CAAsBlB,IAAjC,EAAuC3L,OAAvC,CAA+C,kBAAU;uBAC9Cd,YAAP,CAAoB,YAApB,EAAkCgQ,KAAlC;aADJ;;;;;YAOA,KAAK8L,OAAT,EAAkB;gBACRC,SAAShhB,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,IAAtB,EAA4B,QAA5B,CAAf;;gBAEI,CAACwF,MAAMC,EAAN,CAAS+F,OAAT,CAAiBgb,MAAjB,CAAL,EAA+B;;;;;gBAKzB/O,QAAQ,CAACjS,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYyS,KAA3B,CAAD,GAAqC,KAAKzS,MAAL,CAAYyS,KAAjD,GAAyD,OAAvE;gBACM9F,SAAS2F,KAAKrR,GAAL,CAAS,YAAT,EAAuB,KAAKjB,MAA5B,CAAf;;mBAEOyF,YAAP,CAAoB,OAApB,EAA6BkH,OAAOlE,OAAP,CAAe,SAAf,EAA0BgK,KAA1B,CAA7B;;KA7ID;;;;gBAAA,wBAkJMgP,MAlJN,EAkJc;cACXlK,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBoN,aAAlE,EAAiFD,MAAjF;KAnJG;;;;aAAA,qBAuJGN,MAvJH,EAuJW;;;;aAETnQ,KAAL,CAAWvL,YAAX,CAAwB,QAAxB,EAAkC0b,MAAlC;;;YAGI,CAAC3gB,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAcib,MAA/B,CAAL,EAA6C;mBAClC1kB,QAAQgH,MAAR,EAAP;;;;YAIEke,cAAcnhB,MAAMohB,SAAN,CAAgBT,MAAhB,EACftb,IADe,CACV,YAAM;mBACHK,QAAL,CAAcib,MAAd,CAAqB/d,KAArB,CAA2Bge,eAA3B,cAAqDD,MAArD;mBACOrlB,MAAP,CAAc,OAAKoK,QAAL,CAAcib,MAAd,CAAqB/d,KAAnC,EAA0C;4CACb+d,MAAzB,QADsC;;gCAGtB;aAHpB;eAKGU,YAAH,CAAgB7mB,IAAhB,CAAqB,MAArB,EAA2B,IAA3B;mBACOmmB,MAAP;SATY,CAApB;;;oBAaYpb,KAAZ,CAAkB;mBAAMuK,GAAGuR,YAAH,CAAgB7mB,IAAhB,CAAqB,MAArB,EAA2B,KAA3B,CAAN;SAAlB;;;eAGO2mB,WAAP;KAjLG;;;;gBAAA,wBAqLMnX,KArLN,EAqLa;;cAEV+M,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBvC,OAAlE,EAA2E,KAAKA,OAAhF;cACMwF,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuB8D,MAAlE,EAA0E,KAAKA,MAA/E;cACMb,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBwN,OAAlE,EAA2E,KAAKA,OAAhF;;;cAGMjW,WAAN,CAAkB,KAAK3F,QAAL,CAAckN,OAAd,CAAsBlB,IAAxC,EAA8C,KAAKH,OAAnD;;;YAGIvR,MAAMC,EAAN,CAAS+J,KAAT,CAAeA,KAAf,KAAyBA,MAAMtD,IAAN,KAAe,YAA5C,EAA0D;;;;;WAKvD6a,cAAH,CAAkB/mB,IAAlB,CAAuB,IAAvB;KApMG;;;;gBAAA,wBAwMMwP,KAxMN,EAwMa;;;aACXwX,OAAL,GAAe,CACX,SADW,EAEX,SAFW,EAGbtY,QAHa,CAGJc,MAAMtD,IAHF,CAAf;;;qBAMa,KAAK+a,MAAL,CAAYD,OAAzB;;;aAGKC,MAAL,CAAYD,OAAZ,GAAsBE,WAAW,YAAM;;kBAE7B3K,WAAN,CAAkB,OAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,OAAKjF,MAAL,CAAYsU,UAAZ,CAAuB0N,OAAlE,EAA2E,OAAKA,OAAhF;;;eAGGD,cAAH,CAAkB/mB,IAAlB,CAAuB,MAAvB;SALkB,EAMnB,KAAKgnB,OAAL,GAAe,GAAf,GAAqB,CANF,CAAtB;KAlNG;;;;kBAAA,0BA4NQ7Y,KA5NR,EA4Ne;YACVuJ,WADU,GACG,KAAKxM,QADR,CACVwM,QADU;;;YAGdA,eAAY,KAAK1S,MAAL,CAAYmiB,YAA5B,EAA0C;;iBAEjCJ,cAAL,CAAoB/f,QAAQmH,SAAS,KAAK6Y,OAAd,IAAyB,KAAK5J,MAA9B,IAAwC1F,YAAS5G,OAAjD,IAA4D4G,YAAS0P,KAA7E,CAApB;;;CAjOZ;;ACbA;AACA;;AAQA,IAAM7R,YAAU/P,MAAMgQ,UAAN,EAAhB;;IAEM6R;uBACUviB,MAAZ,EAAoB;;;aACXA,MAAL,GAAcA,MAAd;aACKwiB,OAAL,GAAe,IAAf;;aAEKC,SAAL,GAAiB,KAAKA,SAAL,CAAevmB,IAAf,CAAoB,IAApB,CAAjB;aACKwmB,UAAL,GAAkB,KAAKA,UAAL,CAAgBxmB,IAAhB,CAAqB,IAArB,CAAlB;aACKymB,UAAL,GAAkB,KAAKA,UAAL,CAAgBzmB,IAAhB,CAAqB,IAArB,CAAlB;;;;;;;;kCAIMwO,OAAO;;;gBACPkY,OAAOlY,MAAMC,OAAN,GAAgBD,MAAMC,OAAtB,GAAgCD,MAAMmY,KAAnD;gBACM7W,UAAUtB,MAAMtD,IAAN,KAAe,SAA/B;gBACMjI,SAAS6M,WAAW4W,SAAS,KAAKJ,OAAxC;;;gBAGI9X,MAAMoY,MAAN,IAAgBpY,MAAMqY,OAAtB,IAAiCrY,MAAMsY,OAAvC,IAAkDtY,MAAMG,QAA5D,EAAsE;;;;;;gBAMlE,CAACnK,MAAMC,EAAN,CAASgM,MAAT,CAAgBiW,IAAhB,CAAL,EAA4B;;;;;gBAKtBK,YAAY,SAAZA,SAAY,GAAM;;sBAEfjjB,MAAL,CAAYgS,WAAZ,GAA0B,MAAKhS,MAAL,CAAYsU,QAAZ,GAAuB,EAAvB,IAA6BsO,OAAO,EAApC,CAA1B;aAFJ;;;;gBAOI5W,OAAJ,EAAa;;oBAEHjB,iBAAiB,CACnB,EADmB,EAEnB,EAFmB,EAGnB,EAHmB,EAInB,EAJmB,EAKnB,EALmB,EAMnB,EANmB,EAOnB,EAPmB,EAQnB,EARmB,EASnB,EATmB,EAUnB,EAVmB,EAWnB,EAXmB,EAYnB,EAZmB,EAanB,EAbmB,EAcnB,EAdmB,EAenB,EAfmB,EAgBnB,EAhBmB,EAiBnB,EAjBmB,EAkBnB,EAlBmB,EAmBnB,EAnBmB,EAoBnB,EApBmB,EAqBnB,EArBmB,CAAvB;;;;;oBA2BMb,UAAUxJ,MAAMkK,eAAN,EAAhB;oBACIlK,MAAMC,EAAN,CAAS+F,OAAT,CAAiBwD,OAAjB,KACAA,YAAY,KAAKlK,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BC,IAAxC,IACAzT,MAAMmJ,OAAN,CAAcK,OAAd,EAAuB,KAAKlK,MAAL,CAAYE,MAAZ,CAAmBmT,SAAnB,CAA6B6P,QAApD,CAFJ,EAGE;;;;;oBAKEnY,eAAenB,QAAf,CAAwBgZ,IAAxB,CAAJ,EAAmC;0BACzB7X,cAAN;0BACM2P,eAAN;;;wBAGIkI,IAAR;yBACS,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;;4BAEQ,CAACzjB,MAAL,EAAa;;;;;yBAKZ,EAAL;yBACK,EAAL;;4BAEQ,CAACA,MAAL,EAAa;iCACJa,MAAL,CAAYmjB,UAAZ;;;;yBAIH,EAAL;;6BAESnjB,MAAL,CAAYojB,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;6BAESpjB,MAAL,CAAYqjB,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;4BAEQ,CAAClkB,MAAL,EAAa;iCACJa,MAAL,CAAY4W,KAAZ,GAAoB,CAAC,KAAK5W,MAAL,CAAY4W,KAAjC;;;;yBAIH,EAAL;;6BAES5W,MAAL,CAAYsjB,OAAZ;;;yBAGC,EAAL;;6BAEStjB,MAAL,CAAYyT,MAAZ;;;yBAGC,EAAL;;6BAESzT,MAAL,CAAYgU,UAAZ,CAAuB5J,MAAvB;;;yBAGC,EAAL;;4BAEQ,CAACjL,MAAL,EAAa;iCACJa,MAAL,CAAYwd,cAAZ;;;;yBAIH,EAAL;;6BAESxd,MAAL,CAAY8gB,IAAZ,GAAmB,CAAC,KAAK9gB,MAAL,CAAY8gB,IAAhC;;;;;;;;;;;;;;;;;;;oBAqBJ,CAAC,KAAK9gB,MAAL,CAAYgU,UAAZ,CAAuB/T,OAAxB,IAAmC,KAAKD,MAAL,CAAYgU,UAAZ,CAAuB8F,MAA1D,IAAoE8I,SAAS,EAAjF,EAAqF;yBAC5E5iB,MAAL,CAAYgU,UAAZ,CAAuB5J,MAAvB;;;;qBAICoY,OAAL,GAAeI,IAAf;aAvIJ,MAwIO;qBACEJ,OAAL,GAAe,IAAf;;;;;;;;mCAKG9X,OAAO;qBACLgY,UAAT,CAAoBxnB,IAApB,CAAyB,KAAK8E,MAA9B,EAAsC0K,KAAtC;;;;;;;qCAIS;iBACJ1K,MAAL,CAAY0X,KAAZ,GAAoB,IAApB;;;kBAGMD,WAAN,CAAkB,KAAKzX,MAAL,CAAYoG,QAAZ,CAAqBjB,SAAvC,EAAkD,KAAKnF,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8B0M,OAAhF,EAAyF,IAAzF;;;kBAGMjW,GAAN,CAAUhW,SAASqQ,IAAnB,EAAyB,YAAzB,EAAuC,KAAKqd,UAA5C;;;;;;;iCAIkB;gBAAfvY,MAAe,uEAAN,IAAM;;;gBAEd,KAAKpK,MAAL,CAAYE,MAAZ,CAAmBqjB,QAAnB,CAA4B5tB,MAAhC,EAAwC;sBAC9B4V,cAAN,CAAqBhL,MAArB,EAA6B,eAA7B,EAA8C,KAAKkiB,SAAnD,EAA8DrY,MAA9D,EAAsE,KAAtE;;;;kBAIEmB,cAAN,CAAqBtW,SAASqQ,IAA9B,EAAoC,OAApC,EAA6C,KAAKod,UAAlD,EAA8DtY,MAA9D;;;kBAGMY,EAAN,CAAS/V,SAASqQ,IAAlB,EAAwB,YAAxB,EAAsC,KAAKqd,UAA3C;;;;;;;oCAIQ;;;;gBAEJ,CAAC,KAAK3iB,MAAL,CAAYE,MAAZ,CAAmBqjB,QAAnB,CAA4B5tB,MAA7B,IAAuC,KAAKqK,MAAL,CAAYE,MAAZ,CAAmBqjB,QAAnB,CAA4BrZ,OAAvE,EAAgF;sBACtEc,EAAN,CAAS,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA9B,EAAyC,eAAzC,EAA0D,KAAKsd,SAA/D,EAA0E,KAA1E;;;;;kBAKEzX,EAAN,CAAS,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;sBACpDsS,WAAN,CAAkB/M,MAAMjD,MAAxB,EAAgC,OAAKzH,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BgP,QAA9D,EAAwE,KAAxE;aADJ;;;kBAKMxY,EAAN,CAAS,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA9B,EAAyC,SAAzC,EAAoD,iBAAS;oBACrDuF,MAAMC,OAAN,KAAkB,CAAtB,EAAyB;;;;;;2BAMd,YAAM;0BACP8M,WAAN,CAAkB/W,MAAMkK,eAAN,EAAlB,EAA2C,OAAK5K,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BgP,QAAzE,EAAmF,IAAnF;iBADJ,EAEG,CAFH;aAPJ;;;kBAaMxY,EAAN,CAAS,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA9B,EAAyC,0EAAzC,EAAqH,iBAAS;oBAClHyN,WADkH,GACrG,OAAK5S,MAAL,CAAYoG,QADyF,CAClHwM,QADkH;;;;oBAItHlI,MAAMtD,IAAN,KAAe,iBAAnB,EAAsC;gCACzB4E,OAAT,GAAmB,KAAnB;gCACSsW,KAAT,GAAiB,KAAjB;;;;oBAIE/H,OAAO,CACT,YADS,EAET,WAFS,EAGT,WAHS,EAIX3Q,QAJW,CAIFc,MAAMtD,IAJJ,CAAb;;oBAMIqc,QAAQ,CAAZ;;oBAEIlJ,IAAJ,EAAU;uBACH0H,cAAH,CAAkB/mB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,IAApC;;4BAEQ,OAAKA,MAAL,CAAY0X,KAAZ,GAAoB,IAApB,GAA2B,IAAnC;;;;6BAIS,OAAK1X,MAAL,CAAYmiB,MAAZ,CAAmBvP,QAAhC;;uBAEK5S,MAAL,CAAYmiB,MAAZ,CAAmBvP,QAAnB,GAA8BwP,WAAW;2BAAM5R,GAAGyR,cAAH,CAAkB/mB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,KAApC,CAAN;iBAAX,EAA6DyjB,KAA7D,CAA9B;aA3BJ;;;;;;;gCAgCI;;;;kBAEEzY,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,2BAA5B,EAAyD;uBAAS0B,SAASoO,UAAT,CAAoB9lB,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC0K,KAAtC,CAAT;aAAzD;;;kBAGMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,0CAA5B,EAAwE;uBAAS0B,SAAS4O,cAAT,CAAwBtmB,IAAxB,CAA6B,OAAK8E,MAAlC,EAA0C0K,KAA1C,CAAT;aAAxE;;;;kBAIMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,YAA5B,EAA0C,YAAM;sBACtCxL,YAAN,CAAmB,OAAK1F,MAAL,CAAYoG,QAAZ,CAAqBgO,MAAxC,EAAgD,CAAC,OAAKpU,MAAL,CAAY0jB,QAA7D;sBACMhe,YAAN,CAAmB,OAAK1F,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BK,IAAhD,EAAsD,CAAC,OAAK3T,MAAL,CAAY0jB,QAAnE;aAFJ;;;kBAMM1Y,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,OAA5B,EAAqC,YAAM;;oBAEnC,OAAKlR,MAAL,CAAYmR,OAAZ,IAAuB,OAAKnR,MAAL,CAAYqR,OAAnC,IAA8C,OAAKrR,MAAL,CAAYE,MAAZ,CAAmByjB,UAArE,EAAiF;;2BAExE3jB,MAAL,CAAYwT,OAAZ;;aAJR;;;kBASMxI,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,iCAA5B,EAA+D;uBAAS0B,SAASuF,cAAT,CAAwBjd,IAAxB,CAA6B,OAAK8E,MAAlC,EAA0C0K,KAA1C,CAAT;aAA/D;;;kBAGMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,cAA5B,EAA4C;uBAAS0B,SAASmO,YAAT,CAAsB7lB,IAAtB,CAA2B,OAAK8E,MAAhC,EAAwC0K,KAAxC,CAAT;aAA5C;;;kBAGMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,6CAA5B,EAA2E;uBAASV,GAAGyQ,YAAH,CAAgB/lB,IAAhB,CAAqB,OAAK8E,MAA1B,EAAkC0K,KAAlC,CAAT;aAA3E;;;kBAGMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,gCAA5B,EAA8D;uBAASV,GAAGoT,YAAH,CAAgB1oB,IAAhB,CAAqB,OAAK8E,MAA1B,EAAkC0K,KAAlC,CAAT;aAA9D;;;;kBAIMM,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,SAA5B,EAAuC,YAAM;oBACrC,CAAC,OAAKlR,MAAL,CAAY6jB,GAAjB,EAAsB;;;;;oBAKlB,OAAK7jB,MAAL,CAAY6jB,GAAZ,CAAgB5jB,OAAhB,IAA2B,CAAC,OAAKD,MAAL,CAAY6jB,GAAZ,CAAgBC,WAAhD,EAA6D;;2BAEpD9jB,MAAL,CAAY6jB,GAAZ,CAAgBE,cAAhB,CAA+Bhe,IAA/B,CAAoC;+BAAM,OAAK/F,MAAL,CAAY6jB,GAAZ,CAAgBzR,IAAhB,EAAN;qBAApC,EAAkEnM,KAAlE,CAAwE;+BAAM,OAAKjG,MAAL,CAAYoS,IAAZ,EAAN;qBAAxE;;aARR;;;gBAaI,KAAKpS,MAAL,CAAYK,SAAZ,CAAsBmQ,EAAtB,IAA4B,KAAKxQ,MAAL,CAAYE,MAAZ,CAAmB8jB,WAA/C,IAA8D,CAAC,KAAKhkB,MAAL,CAAYsR,OAA/E,EAAwF;;oBAE9EjL,UAAU3F,MAAM0S,UAAN,CAAiBlY,IAAjB,CAAsB,KAAK8E,MAA3B,QAAuC,KAAKA,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8B3D,KAArE,CAAhB;;;oBAGI,CAACnQ,MAAMC,EAAN,CAAS+F,OAAT,CAAiBL,OAAjB,CAAL,EAAgC;;;;;sBAK1B2E,EAAN,CAAS3E,OAAT,EAAkB,OAAlB,EAA2B,YAAM;;wBAEzB,OAAKrG,MAAL,CAAYE,MAAZ,CAAmBmiB,YAAnB,IAAmC,OAAKriB,MAAL,CAAY0X,KAA/C,IAAwD,CAAC,OAAK1X,MAAL,CAAYsY,MAAzE,EAAiF;;;;wBAI7E,OAAKtY,MAAL,CAAYsY,MAAhB,EAAwB;+BACftY,MAAL,CAAYoS,IAAZ;qBADJ,MAEO,IAAI,OAAKpS,MAAL,CAAYikB,KAAhB,EAAuB;+BACrBjkB,MAAL,CAAYwT,OAAZ;+BACKxT,MAAL,CAAYoS,IAAZ;qBAFG,MAGA;+BACEpS,MAAL,CAAYuT,KAAZ;;iBAZR;;;;gBAkBA,KAAKvT,MAAL,CAAYK,SAAZ,CAAsBmQ,EAAtB,IAA4B,KAAKxQ,MAAL,CAAYE,MAAZ,CAAmBgkB,kBAAnD,EAAuE;sBAC7DlZ,EAAN,CACI,KAAKhL,MAAL,CAAYoG,QAAZ,CAAqBC,OADzB,EAEI,aAFJ,EAGI,iBAAS;0BACC0E,cAAN;iBAJR,EAMI,KANJ;;;;kBAWEC,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,cAA5B,EAA4C,YAAM;;uBAEzClR,MAAL,CAAYG,OAAZ,CAAoB+c,GAApB,CAAwB,EAAE9I,QAAQ,OAAKpU,MAAL,CAAYoU,MAAtB,EAA8BwC,OAAO,OAAK5W,MAAL,CAAY4W,KAAjD,EAAxB;aAFJ;;;kBAMM5L,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,YAA5B,EAA0C,YAAM;;yBAEnCqI,aAAT,CAAuBre,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,OAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoB+c,GAApB,CAAwB,EAAEjD,OAAO,OAAKja,MAAL,CAAYia,KAArB,EAAxB;aALJ;;;kBASMjP,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,kBAA5B,EAAgD,iBAAS;;uBAEhDlR,MAAL,CAAYG,OAAZ,CAAoB+c,GAApB,CAAwB,EAAEvE,SAASjO,MAAMmB,MAAN,CAAa8M,OAAxB,EAAxB;aAFJ;;;kBAMM3N,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,eAA5B,EAA6C,iBAAS;;yBAEzCqI,aAAT,CAAuBre,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,SAAzC,EAAoD,IAApD,EAA0D0K,MAAMmB,MAAN,CAAa8M,OAAvE;aAFJ;;;kBAMM3N,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,gBAA5B,EAA8C,YAAM;;yBAEvCqI,aAAT,CAAuBre,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoB+c,GAApB,CAAwB,EAAEnD,UAAU,OAAK/Z,MAAL,CAAY+Z,QAAxB,EAAxB;aALJ;;;kBASM/O,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,kCAA5B,EAAgE,YAAM;;yBAEzDqI,aAAT,CAAuBre,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoB+c,GAApB,CAAwB,EAAEnJ,UAAU,OAAK/T,MAAL,CAAY+T,QAAZ,CAAqB+F,MAAjC,EAAxB;aALJ;;;;kBAUM9O,EAAN,CAAS,KAAKhL,MAAL,CAAYkR,KAArB,EAA4B,KAAKlR,MAAL,CAAYE,MAAZ,CAAmBsL,MAAnB,CAA0B2Y,MAA1B,CAAiC,CACzD,OADyD,EAEzD,SAFyD,CAAjC,EAGzB3U,IAHyB,CAGpB,GAHoB,CAA5B,EAGc,iBAAS;oCACC9E,KADD,CACdmB,MADc;oBACdA,MADc,iCACL,EADK;;;;oBAIfnB,MAAMtD,IAAN,KAAe,OAAnB,EAA4B;6BACf,OAAKpH,MAAL,CAAYkR,KAAZ,CAAkBwD,KAA3B;;;sBAGE5I,aAAN,CAAoB5Q,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC,OAAKA,MAAL,CAAYoG,QAAZ,CAAqBjB,SAA3D,EAAsEuF,MAAMtD,IAA5E,EAAkF,IAAlF,EAAwFyE,MAAxF;aAXJ;;;;;;;sCAgBO;;;;gBAEDuY,aAAa3T,UAAQyC,IAAR,GAAe,QAAf,GAA0B,OAA7C;;;gBAGMmR,QAAQ,SAARA,KAAQ,CAAC3Z,KAAD,EAAQ4Z,cAAR,EAAwBC,gBAAxB,EAA6C;oBACjDC,gBAAgB,OAAKxkB,MAAL,CAAYE,MAAZ,CAAmBygB,SAAnB,CAA6B4D,gBAA7B,CAAtB;oBACME,mBAAmB/jB,MAAMC,EAAN,CAAS0K,QAAT,CAAkBmZ,aAAlB,CAAzB;oBACIE,WAAW,IAAf;;;oBAGID,gBAAJ,EAAsB;+BACPD,cAActpB,IAAd,CAAmB,OAAK8E,MAAxB,EAAgC0K,KAAhC,CAAX;;;;oBAIAga,YAAYhkB,MAAMC,EAAN,CAAS0K,QAAT,CAAkBiZ,cAAlB,CAAhB,EAAmD;mCAChCppB,IAAf,CAAoB,OAAK8E,MAAzB,EAAiC0K,KAAjC;;aAZR;;;gBAiBMM,KAAK,SAALA,EAAK,CAACtE,OAAD,EAAUU,IAAV,EAAgBkd,cAAhB,EAAgCC,gBAAhC,EAAqE;oBAAnBpZ,OAAmB,uEAAT,IAAS;;oBACtEqZ,gBAAgB,OAAKxkB,MAAL,CAAYE,MAAZ,CAAmBygB,SAAnB,CAA6B4D,gBAA7B,CAAtB;oBACME,mBAAmB/jB,MAAMC,EAAN,CAAS0K,QAAT,CAAkBmZ,aAAlB,CAAzB;;sBAEMxZ,EAAN,CAAStE,OAAT,EAAkBU,IAAlB,EAAwB;2BAASid,MAAM3Z,KAAN,EAAa4Z,cAAb,EAA6BC,gBAA7B,CAAT;iBAAxB,EAAiFpZ,WAAW,CAACsZ,gBAA7F;aAJJ;;;eAQG,KAAKzkB,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BlB,IAAhC,EAAsC,OAAtC,EAA+C,KAAKpS,MAAL,CAAYmjB,UAA3D,EAAuE,MAAvE;;;eAGG,KAAKnjB,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BE,OAAhC,EAAyC,OAAzC,EAAkD,KAAKxT,MAAL,CAAYwT,OAA9D,EAAuE,SAAvE;;;eAGG,KAAKxT,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BG,MAAhC,EAAwC,OAAxC,EAAiD,KAAKzT,MAAL,CAAYyT,MAA7D,EAAqE,QAArE;;;eAGG,KAAKzT,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BI,WAAhC,EAA6C,OAA7C,EAAsD,KAAK1T,MAAL,CAAYsjB,OAAlE,EAA2E,aAA3E;;;eAII,KAAKtjB,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BK,IADjC,EAEI,OAFJ,EAGI,YAAM;uBACG3T,MAAL,CAAY4W,KAAZ,GAAoB,CAAC,OAAK5W,MAAL,CAAY4W,KAAjC;aAJR,EAMI,MANJ;;;eAUG,KAAK5W,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BS,QAAhC,EAA0C,OAA1C,EAAmD,KAAK/T,MAAL,CAAYwd,cAA/D;;;eAII,KAAKxd,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BU,UADjC,EAEI,OAFJ,EAGI,YAAM;uBACGhU,MAAL,CAAYgU,UAAZ,CAAuB5J,MAAvB;aAJR,EAMI,YANJ;;;eAWI,KAAKpK,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BM,GADjC,EAEI,OAFJ,EAGI,YAAM;uBACG5T,MAAL,CAAY4T,GAAZ,GAAkB,QAAlB;aAJR,EAMI,KANJ;;;eAUG,KAAK5T,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BO,OAAhC,EAAyC,OAAzC,EAAkD,KAAK7T,MAAL,CAAY6T,OAA9D,EAAuE,SAAvE;;;eAGG,KAAK7T,MAAL,CAAYoG,QAAZ,CAAqBkN,OAArB,CAA6BQ,QAAhC,EAA0C,OAA1C,EAAmD,iBAAS;yBAC/C4O,UAAT,CAAoBxnB,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC0K,KAAtC;aADJ;;;eAKG,KAAK1K,MAAL,CAAYoG,QAAZ,CAAqB0N,QAArB,CAA8BwG,IAAjC,EAAuC,OAAvC,EAAgD,iBAAS;sBAC/CI,eAAN;;;oBAGMiK,cAAc,SAAdA,WAAc,GAAM;wBAChB9oB,wBAAsB,OAAKmE,MAAL,CAAYnE,EAAlC,UAAN;6BACS+oB,OAAT,CAAiB1pB,IAAjB,CAAsB,OAAK8E,MAA3B,EAAmCnE,EAAnC;iBAFJ;;;oBAMI6E,MAAMmJ,OAAN,CAAca,MAAMjD,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmBmT,SAAnB,CAA6Ba,MAA7B,CAAoC6F,QAAhE,CAAJ,EAA+E;0BAEvErP,KADJ,EAEI,YAAM;+BACG1K,MAAL,CAAYyZ,YAAZ,GAA2B1X,OAAO2I,MAAMjD,MAAN,CAAaS,KAApB,CAA3B;;qBAHR,EAMI,UANJ;iBADJ,MASO,IAAIxH,MAAMmJ,OAAN,CAAca,MAAMjD,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmBmT,SAAnB,CAA6Ba,MAA7B,CAAoCyE,OAAhE,CAAJ,EAA8E;0BAE7EjO,KADJ,EAEI,YAAM;+BACG1K,MAAL,CAAY2Y,OAAZ,GAAsBjO,MAAMjD,MAAN,CAAaS,KAAnC;;qBAHR,EAMI,SANJ;iBADG,MASA,IAAIxH,MAAMmJ,OAAN,CAAca,MAAMjD,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmBmT,SAAnB,CAA6Ba,MAA7B,CAAoC+F,KAAhE,CAAJ,EAA4E;0BAE3EvP,KADJ,EAEI,YAAM;+BACG1K,MAAL,CAAYia,KAAZ,GAAoBnC,WAAWpN,MAAMjD,MAAN,CAAaS,KAAxB,CAApB;;qBAHR,EAMI,OANJ;iBADG,MASA;wBACGmS,MAAM3P,MAAMjD,MAAlB;6BACSmd,OAAT,CAAiB1pB,IAAjB,CAAsB,OAAK8E,MAA3B,EAAmCqa,IAAIpO,YAAJ,CAAiB,eAAjB,CAAnC;;aAvCR;;;eA4CG,KAAKjM,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BC,IAA/B,EAAqC,qBAArC,EAA4D,iBAAS;oBAC3DmD,aAAa,OAAKtX,MAAL,CAAYoG,QAAZ,CAAqB6N,QAArB,CAA8BsD,qBAA9B,EAAnB;oBACMF,UAAU,MAAMC,WAAW1H,KAAjB,IAA0BlF,MAAMiN,KAAN,GAAcL,WAAWM,IAAnD,CAAhB;sBACMiN,aAAN,CAAoBlf,YAApB,CAAiC,YAAjC,EAA+C0R,OAA/C;aAHJ;;;eAOG,KAAKrX,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BC,IAA/B,EAAqC,qDAArC,EAA4F,iBAAS;oBAC3FA,OAAOzJ,MAAMma,aAAnB;;oBAEMjC,OAAOlY,MAAMC,OAAN,GAAgBD,MAAMC,OAAtB,GAAgCD,MAAMmY,KAAnD;oBACMiC,YAAYpa,MAAMtD,IAAxB;;oBAEI,CAAC0d,cAAc,SAAd,IAA2BA,cAAc,OAA1C,KAAuDlC,SAAS,EAAT,IAAeA,SAAS,EAAnF,EAAwF;;;;oBAIlFxQ,OAAO+B,KAAKhL,YAAL,CAAkB,gBAAlB,CAAb;;;oBAGM4b,OAAO,CACT,SADS,EAET,UAFS,EAGT,OAHS,EAIXnb,QAJW,CAIFc,MAAMtD,IAJJ,CAAb;;;oBAOIgL,QAAQ2S,IAAZ,EAAkB;yBACT3b,eAAL,CAAqB,gBAArB;2BACKpJ,MAAL,CAAYoS,IAAZ;iBAFJ,MAGO,IAAI,CAAC2S,IAAD,IAAS,OAAK/kB,MAAL,CAAYiS,OAAzB,EAAkC;yBAChCtM,YAAL,CAAkB,gBAAlB,EAAoC,EAApC;2BACK3F,MAAL,CAAYuT,KAAZ;;aAzBR;;;eA+BI,KAAKvT,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BC,IADhC,EAEIiQ,UAFJ,EAGI,iBAAS;oBACCjQ,OAAOzJ,MAAMma,aAAnB;;;oBAGIG,SAAS7Q,KAAKlI,YAAL,CAAkB,YAAlB,CAAb;;oBAEIvL,MAAMC,EAAN,CAASC,KAAT,CAAeokB,MAAf,CAAJ,EAA4B;6BACf7Q,KAAKjM,KAAd;;;qBAGCkB,eAAL,CAAqB,YAArB;;uBAEKpJ,MAAL,CAAYgS,WAAZ,GAA0BgT,SAAS7Q,KAAK9H,GAAd,GAAoB,OAAKrM,MAAL,CAAYsU,QAA1D;aAfR,EAiBI,MAjBJ;;;;gBAsBI,KAAKtU,MAAL,CAAYE,MAAZ,CAAmB+kB,YAAnB,IAAmC,CAACvkB,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAK1G,MAAL,CAAYoG,QAAZ,CAAqBiO,OAArB,CAA6BC,QAA9C,CAAxC,EAAiG;mBAC1F,KAAKtU,MAAL,CAAYoG,QAAZ,CAAqBiO,OAArB,CAA6BrC,WAAhC,EAA6C,OAA7C,EAAsD,YAAM;;wBAEpD,OAAKhS,MAAL,CAAYgS,WAAZ,KAA4B,CAAhC,EAAmC;;;;2BAI9BhS,MAAL,CAAYE,MAAZ,CAAmB+X,UAAnB,GAAgC,CAAC,OAAKjY,MAAL,CAAYE,MAAZ,CAAmB+X,UAApD;;6BAES+I,UAAT,CAAoB9lB,IAApB,CAAyB,OAAK8E,MAA9B;iBARJ;;;;eAcA,KAAKA,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BE,MADhC,EAEIgQ,UAFJ,EAGI,iBAAS;uBACApkB,MAAL,CAAYoU,MAAZ,GAAqB1J,MAAMjD,MAAN,CAAaS,KAAlC;aAJR,EAMI,QANJ;;;gBAUIuI,UAAQyG,QAAZ,EAAsB;mBACfxW,MAAM4J,WAAN,CAAkBpP,IAAlB,CAAuB,KAAK8E,MAA5B,EAAoC,qBAApC,CAAH,EAA+D,OAA/D,EAAwE,iBAAS;6BACpEmW,eAAT,CAAyBjb,IAAzB,CAA8B,OAAK8E,MAAnC,EAA2C0K,MAAMjD,MAAjD;iBADJ;;;;eAMD,KAAKzH,MAAL,CAAYoG,QAAZ,CAAqB6N,QAAxB,EAAkC,iCAAlC,EAAqE;uBAASrB,SAAS2F,iBAAT,CAA2Brd,IAA3B,CAAgC,OAAK8E,MAArC,EAA6C0K,KAA7C,CAAT;aAArE;;;eAGG,KAAK1K,MAAL,CAAYoG,QAAZ,CAAqBwM,QAAxB,EAAkC,uBAAlC,EAA2D,iBAAS;uBAC3D5S,MAAL,CAAYoG,QAAZ,CAAqBwM,QAArB,CAA8B0P,KAA9B,GAAsC,CAAC,OAAKtiB,MAAL,CAAY0X,KAAb,IAAsBhN,MAAMtD,IAAN,KAAe,YAA3E;aADJ;;;eAKG,KAAKpH,MAAL,CAAYoG,QAAZ,CAAqBwM,QAAxB,EAAkC,mDAAlC,EAAuF,iBAAS;uBACvF5S,MAAL,CAAYoG,QAAZ,CAAqBwM,QAArB,CAA8B5G,OAA9B,GAAwC,CACpC,WADoC,EAEpC,YAFoC,EAGtCpC,QAHsC,CAG7Bc,MAAMtD,IAHuB,CAAxC;aADJ;;;eAQG,KAAKpH,MAAL,CAAYoG,QAAZ,CAAqBwM,QAAxB,EAAkC,kBAAlC,EAAsD,iBAAS;8BACtB,OAAK5S,MADiB;oBACnDE,MADmD,WACnDA,MADmD;oBAC3CkG,QAD2C,WAC3CA,QAD2C;oBACjC+b,MADiC,WACjCA,MADiC;;;;sBAIrD1K,WAAN,CAAkBrR,SAASwM,QAA3B,EAAqC1S,OAAOsU,UAAP,CAAkB0Q,YAAvD,EAAqExa,MAAMtD,IAAN,KAAe,SAApF;;;mBAGG6a,cAAH,CAAkB/mB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC0K,MAAMtD,IAAN,KAAe,SAAnD;;;oBAGIsD,MAAMtD,IAAN,KAAe,SAAnB,EAA8B;;+BAEf,YAAM;8BACPqQ,WAAN,CAAkBrR,SAASwM,QAA3B,EAAqC1S,OAAOsU,UAAP,CAAkB0Q,YAAvD,EAAqE,KAArE;qBADJ,EAEG,CAFH;;;wBAKMzB,QAAQ,OAAK/L,KAAL,GAAa,IAAb,GAAoB,IAAlC;;;iCAGayK,OAAOvP,QAApB;;2BAEOA,QAAP,GAAkBwP,WAAW;+BAAM5R,GAAGyR,cAAH,CAAkB/mB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,KAApC,CAAN;qBAAX,EAA6DyjB,KAA7D,CAAlB;;aAtBR;;;eA4BI,KAAKzjB,MAAL,CAAYoG,QAAZ,CAAqB8N,MAArB,CAA4BE,MADhC,EAEI,OAFJ,EAGI,iBAAS;;;oBAGC1H,WAAWhC,MAAMya,iCAAvB;oBACM1sB,OAAO,IAAI,EAAjB;oBACI2sB,YAAY,CAAhB;;;oBAGI1a,MAAM2a,MAAN,GAAe,CAAf,IAAoB3a,MAAM4a,MAAN,GAAe,CAAvC,EAA0C;wBAClC5Y,QAAJ,EAAc;+BACL1M,MAAL,CAAYqjB,cAAZ,CAA2B5qB,IAA3B;oCACY,CAAC,CAAb;qBAFJ,MAGO;+BACEuH,MAAL,CAAYojB,cAAZ,CAA2B3qB,IAA3B;oCACY,CAAZ;;;;;oBAKJiS,MAAM2a,MAAN,GAAe,CAAf,IAAoB3a,MAAM4a,MAAN,GAAe,CAAvC,EAA0C;wBAClC5Y,QAAJ,EAAc;+BACL1M,MAAL,CAAYojB,cAAZ,CAA2B3qB,IAA3B;oCACY,CAAZ;qBAFJ,MAGO;+BACEuH,MAAL,CAAYqjB,cAAZ,CAA2B5qB,IAA3B;oCACY,CAAC,CAAb;;;;;oBAKH2sB,cAAc,CAAd,IAAmB,OAAKplB,MAAL,CAAYkR,KAAZ,CAAkBkD,MAAlB,GAA2B,CAA/C,IAAsDgR,cAAc,CAAC,CAAf,IAAoB,OAAKplB,MAAL,CAAYkR,KAAZ,CAAkBkD,MAAlB,GAA2B,CAAzG,EAA6G;0BACnGrJ,cAAN;;aAlCZ,EAqCI,QArCJ,EAsCI,KAtCJ;;;;;;;gCA2CI;iBACCpV,MAAL,CAAY,KAAZ;;;;;;AC5tBR;AACA;;AASA,SAAS4vB,mBAAT,CAA6BnT,IAA7B,EAAmC;QAC3BA,QAAQ,CAAC,KAAKsL,KAAL,CAAW8H,SAAxB,EAAmC;aAC1B9H,KAAL,CAAW8H,SAAX,GAAuB,IAAvB;;QAEA,KAAKtU,KAAL,CAAWoH,MAAX,KAAsBlG,IAA1B,EAAgC;aACvBlB,KAAL,CAAWoH,MAAX,GAAoB,CAAClG,IAArB;cACMtG,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2CkB,OAAO,MAAP,GAAgB,OAA3D;;;;AAIR,IAAM3D,QAAQ;SAAA,mBACF;;;;cAEEgJ,WAAN,CAAkB,KAAKrR,QAAL,CAAcC,OAAhC,EAAyC,KAAKnG,MAAL,CAAYsU,UAAZ,CAAuBkJ,KAAhE,EAAuE,IAAvE;;;cAGM+H,cAAN,CAAqBvqB,IAArB,CAA0B,IAA1B;;;YAGI,CAACwF,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOmlB,KAAvB,CAAL,EAAoC;kBAE3BC,UADL,CACgB,KAAKzlB,MAAL,CAAY0lB,IAAZ,CAAiBnX,KAAjB,CAAuBoX,GADvC,EAEK9f,IAFL,CAEU,YAAM;sBACFob,KAAN,CAAYjmB,IAAZ,CAAiB,KAAjB;aAHR,EAKK+K,KALL,CAKW,iBAAS;sBACPqM,KAAL,CAAWqC,IAAX,CAAgB,0BAAhB,EAA4CD,KAA5C;aANR;SADJ,MASO;kBACGyM,KAAN,CAAYjmB,IAAZ,CAAiB,IAAjB;;KAnBE;;;;;kBAAA,0BAyBK0G,KAzBL,EAyBY;YACZqO,QAAQvP,MAAMC,EAAN,CAASK,MAAT,CAAgBY,KAAhB,IAAyBA,MAAM0G,KAAN,CAAY,GAAZ,CAAzB,GAA4C,KAAKpI,MAAL,CAAY+P,KAAZ,CAAkB3H,KAAlB,CAAwB,GAAxB,CAA1D;YACMwd,UAAU,MAAM7V,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAjC;aACK7J,QAAL,CAAcC,OAAd,CAAsB/C,KAAtB,CAA4ByiB,aAA5B,GAA+CD,OAA/C;;YAEI,KAAKzlB,SAAL,CAAemQ,EAAnB,EAAuB;gBACbX,SAAS,GAAf;gBACMmW,SAAS,CAACnW,SAASiW,OAAV,KAAsBjW,SAAS,EAA/B,CAAf;;iBAEKqB,KAAL,CAAW5N,KAAX,CAAiB2iB,SAAjB,oBAA4CD,MAA5C;;KAlCE;;;;SAAA,mBAuCF;;;YACEhmB,SAAS,IAAf;;;YAGMyL,UAAU;kBACNzL,OAAOE,MAAP,CAAc4gB,IAAd,CAAmBhH,MADb;sBAEF9Z,OAAOkmB,QAFL;;oBAIJ,KAJI;sBAKF,KALE;mBAML,KANK;mBAOL,IAPK;yBAQC,CARD;qBASH,OATG;yBAUC,CAAC,KAAKhmB,MAAL,CAAY8T,UAAZ,CAAuB0L;SAVzC;YAYMxQ,SAASxO,MAAMylB,cAAN,CAAqB1a,OAArB,CAAf;;;YAGIqC,SAAS9N,OAAOkR,KAAP,CAAajF,YAAb,CAA0B,KAA1B,CAAb;;;YAGIvL,MAAMC,EAAN,CAASC,KAAT,CAAekN,MAAf,CAAJ,EAA4B;qBACf9N,OAAOkR,KAAP,CAAajF,YAAb,CAA0BjM,OAAOE,MAAP,CAAcmH,UAAd,CAAyBqW,KAAzB,CAA+B7hB,EAAzD,CAAT;;;YAGEA,KAAK6E,MAAM0lB,YAAN,CAAmBtY,MAAnB,CAAX;;;YAGM4T,SAAShhB,MAAM+E,aAAN,CAAoB,QAApB,CAAf;YACMpB,MAAM3D,MAAMmM,MAAN,CAAa7M,OAAOE,MAAP,CAAc0lB,IAAd,CAAmBnX,KAAnB,CAAyBiT,MAAtC,EAA8C7lB,EAA9C,EAAkDqT,MAAlD,CAAZ;eACOvJ,YAAP,CAAoB,KAApB,EAA2BtB,GAA3B;eACOsB,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;eACOA,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;eACOA,YAAP,CAAoB,OAApB,EAA6B,UAA7B;;;YAGMU,UAAU3F,MAAM+E,aAAN,CAAoB,KAApB,EAA2B,EAAEuD,OAAOhJ,OAAOE,MAAP,CAAcsU,UAAd,CAAyB6R,cAAlC,EAA3B,CAAhB;gBACQnf,WAAR,CAAoBwa,MAApB;eACOxQ,KAAP,GAAexQ,MAAM4lB,cAAN,CAAqBjgB,OAArB,EAA8BrG,OAAOkR,KAArC,CAAf;;;cAGMpL,KAAN,CAAYpF,MAAMmM,MAAN,CAAa7M,OAAOE,MAAP,CAAc0lB,IAAd,CAAmBnX,KAAnB,CAAyB8B,GAAtC,EAA2C1U,EAA3C,CAAZ,EAA4D,MAA5D,EAAoEkK,IAApE,CAAyE,oBAAY;gBAC7ErF,MAAMC,EAAN,CAASC,KAAT,CAAeoD,QAAf,CAAJ,EAA8B;;;;;gBAKxBR,MAAM,IAAIqP,GAAJ,CAAQ7O,SAAS,CAAT,EAAYuiB,eAApB,CAAZ;;;gBAGIC,QAAJ,GAAkBhjB,IAAIgjB,QAAJ,CAAale,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB;;;eAGGiZ,SAAH,CAAarmB,IAAb,CAAkB8E,MAAlB,EAA0BwD,IAAIqL,IAA9B;SAZJ;;;;eAiBO6O,KAAP,GAAe,IAAInd,OAAOmlB,KAAP,CAAae,MAAjB,CAAwB/E,MAAxB,EAAgC;uBAChC1hB,OAAOE,MAAP,CAAcwmB,SADkB;mBAEpC1mB,OAAO4W;SAFH,CAAf;;eAKO1F,KAAP,CAAaoH,MAAb,GAAsB,IAAtB;eACOpH,KAAP,CAAac,WAAb,GAA2B,CAA3B;;;YAGIhS,OAAOK,SAAP,CAAiBmQ,EAArB,EAAyB;mBACdkN,KAAP,CAAaiJ,gBAAb;;;;eAIGzV,KAAP,CAAakB,IAAb,GAAoB,YAAM;gCACFlX,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;mBACOA,OAAO0d,KAAP,CAAatL,IAAb,EAAP;SAFJ;;eAKOlB,KAAP,CAAaqC,KAAb,GAAqB,YAAM;gCACHrY,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;mBACOA,OAAO0d,KAAP,CAAanK,KAAb,EAAP;SAFJ;;eAKOrC,KAAP,CAAa0V,IAAb,GAAoB,YAAM;mBACfrT,KAAP;mBACOvB,WAAP,GAAqB,CAArB;SAFJ;;;YAMMA,WAzFF,GAyFkBhS,OAAOkR,KAzFzB,CAyFEc,WAzFF;;eA0FGT,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,aAApC,EAAmD;eAAA,iBACzC;uBACKc,WAAP;aAF2C;eAAA,eAI3CxF,IAJ2C,EAIrC;;;;oBAIEkR,KAJF,GAImC1d,MAJnC,CAIE0d,KAJF;oBAISxM,KAJT,GAImClR,MAJnC,CAISkR,KAJT;oBAIgBoH,MAJhB,GAImCtY,MAJnC,CAIgBsY,MAJhB;oBAIwBlE,MAJxB,GAImCpU,MAJnC,CAIwBoU,MAJxB;;oBAKAyS,eAAevO,UAAU,CAACoF,MAAM8H,SAAtC;;;sBAGMtN,OAAN,GAAgB,IAAhB;sBACMpM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCkR,KAAjC,EAAwC,SAAxC;;;wBAGQxN,OAAR,CAAgBmjB,gBAAgBnJ,MAAMoJ,SAAN,CAAgB,CAAhB,CAAhC;;iBAEK/gB,IAFL,CAEU;2BAAM2X,MAAMqJ,cAAN,CAAqBva,IAArB,CAAN;iBAFV;;iBAIKzG,IAJL,CAIU;2BAAM8gB,gBAAgBnJ,MAAMnK,KAAN,EAAtB;iBAJV;;iBAMKxN,IANL,CAMU;2BAAM8gB,gBAAgBnJ,MAAMoJ,SAAN,CAAgB1S,MAAhB,CAAtB;iBANV,EAOKnO,KAPL,CAOW,YAAM;;iBAPjB;;SAhBR;;;YA8BIgU,QAAQja,OAAOE,MAAP,CAAc+Z,KAAd,CAAoB+M,QAAhC;eACOzV,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,cAApC,EAAoD;eAAA,iBAC1C;uBACK+I,KAAP;aAF4C;eAAA,eAI5CrY,KAJ4C,EAIrC;uBACA8b,KAAP,CACKuJ,eADL,CACqBrlB,KADrB,EAEKmE,IAFL,CAEU,YAAM;4BACAnE,KAAR;0BACMkK,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;iBAJR,EAMKjL,KANL,CAMW,iBAAS;;wBAERyO,MAAMoG,IAAN,KAAe,OAAnB,EAA4B;iCACfmB,YAAT,CAAsB/gB,IAAtB,CAA2B8E,MAA3B,EAAmC,EAAnC;;iBATZ;;SALR;;;YAqBMoU,MA9IF,GA8IapU,OAAOE,MA9IpB,CA8IEkU,MA9IF;;eA+IG7C,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,QAApC,EAA8C;eAAA,iBACpC;uBACKkD,MAAP;aAFsC;eAAA,eAItCxS,KAJsC,EAI/B;uBACA8b,KAAP,CAAaoJ,SAAb,CAAuBllB,KAAvB,EAA8BmE,IAA9B,CAAmC,YAAM;6BAC5BnE,KAAT;0BACMkK,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,cAA/C;iBAFJ;;SALR;;;YAaM0F,KA5JF,GA4JY5W,OAAOE,MA5JnB,CA4JE0W,KA5JF;;eA6JGrF,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACK0F,KAAP;aAFqC;eAAA,eAIrChV,KAJqC,EAI9B;oBACDwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAjD;;uBAEO8b,KAAP,CAAaoJ,SAAb,CAAuB1c,SAAS,CAAT,GAAapK,OAAOE,MAAP,CAAckU,MAAlD,EAA0DrO,IAA1D,CAA+D,YAAM;4BACzDqE,MAAR;0BACM0B,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,cAA/C;iBAFJ;;SAPR;;;YAeM4P,IA5KF,GA4KW9gB,OAAOE,MA5KlB,CA4KE4gB,IA5KF;;eA6KGvP,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,MAApC,EAA4C;eAAA,iBAClC;uBACK4P,IAAP;aAFoC;eAAA,eAIpClf,KAJoC,EAI7B;oBACDwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC5B,OAAOE,MAAP,CAAc4gB,IAAd,CAAmBhH,MAApE;;uBAEO4D,KAAP,CAAawJ,OAAb,CAAqB9c,MAArB,EAA6BrE,IAA7B,CAAkC,YAAM;2BAC7BqE,MAAP;iBADJ;;SAPR;;;YAcI+c,mBAAJ;eACOzJ,KAAP,CACK0J,WADL,GAEKrhB,IAFL,CAEU,iBAAS;yBACEmC,KAAb;SAHR,EAKKjC,KALL,CAKW,iBAAS;mBACPqM,KAAL,CAAWqC,IAAX,CAAgBD,KAAhB;SANR;;eASOnD,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,YAApC,EAAkD;eAAA,iBACxC;uBACKiW,UAAP;;SAFR;;;eAOO5V,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACKlR,OAAOgS,WAAP,KAAuBhS,OAAOsU,QAArC;;SAFR;;;gBAOQ+S,GAAR,CAAY,CACRrnB,OAAO0d,KAAP,CAAa4J,aAAb,EADQ,EAERtnB,OAAO0d,KAAP,CAAa6J,cAAb,EAFQ,CAAZ,EAGGxhB,IAHH,CAGQ,sBAAc;gBACZkK,QAAQvP,MAAM8mB,cAAN,CAAqBC,WAAW,CAAX,CAArB,EAAoCA,WAAW,CAAX,CAApC,CAAd;kBACMhC,cAAN,CAAqBvqB,IAArB,CAA0B,MAA1B,EAAgC+U,KAAhC;SALJ;;;eASOyN,KAAP,CAAagK,YAAb,CAA0B1nB,OAAOE,MAAP,CAAcwmB,SAAxC,EAAmD3gB,IAAnD,CAAwD,iBAAS;mBACtD7F,MAAP,CAAcwmB,SAAd,GAA0Bxa,KAA1B;SADJ;;;eAKOwR,KAAP,CAAaiK,aAAb,GAA6B5hB,IAA7B,CAAkC,iBAAS;mBAChC7F,MAAP,CAAcyS,KAAd,GAAsBA,KAAtB;eACGyO,QAAH,CAAYlmB,IAAZ,CAAiB,MAAjB;SAFJ;;;eAMOwiB,KAAP,CAAakK,cAAb,GAA8B7hB,IAA9B,CAAmC,iBAAS;0BAC1BmC,KAAd;kBACM4D,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;SAFJ;;;eAMOwM,KAAP,CAAamK,WAAb,GAA2B9hB,IAA3B,CAAgC,iBAAS;mBAC9BmL,KAAP,CAAaoD,QAAb,GAAwBpM,KAAxB;kBACM4D,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;SAFJ;;;eAMOwM,KAAP,CAAaoK,aAAb,GAA6B/hB,IAA7B,CAAkC,kBAAU;mBACjCmL,KAAP,CAAasL,UAAb,GAA0B7C,MAA1B;qBACSkH,KAAT,CAAe3lB,IAAf,CAAoB8E,MAApB;SAFJ;;eAKO0d,KAAP,CAAa1S,EAAb,CAAgB,WAAhB,EAA6B,gBAAmB;iCAAhB+S,IAAgB;gBAAhBA,IAAgB,6BAAT,EAAS;;gBACtCgK,eAAehK,KAAKzO,GAAL,CAAS;uBAAO5O,MAAMsnB,SAAN,CAAgB/J,IAAI3W,IAApB,CAAP;aAAT,CAArB;qBACS8V,UAAT,CAAoBliB,IAApB,CAAyB8E,MAAzB,EAAiC+nB,YAAjC;SAFJ;;eAKOrK,KAAP,CAAa1S,EAAb,CAAgB,QAAhB,EAA0B,YAAM;;mBAErB0S,KAAP,CAAauK,SAAb,GAAyBliB,IAAzB,CAA8B,kBAAU;oCAChB7K,IAApB,CAAyB8E,MAAzB,EAAiC,CAACsY,MAAlC;oBACI,CAACA,MAAL,EAAa;0BACHxM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,SAA/C;;aAHR;;gBAOIxQ,MAAMC,EAAN,CAAS+F,OAAT,CAAiB1G,OAAO0d,KAAP,CAAahX,OAA9B,KAA0C1G,OAAOK,SAAP,CAAiBmQ,EAA/D,EAAmE;oBACzD0X,QAAQloB,OAAO0d,KAAP,CAAahX,OAA3B;;;;sBAIMf,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;;SAdR;;eAkBO+X,KAAP,CAAa1S,EAAb,CAAgB,MAAhB,EAAwB,YAAM;gCACN9P,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;kBACM8L,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,SAA/C;SAFJ;;eAKOwM,KAAP,CAAa1S,EAAb,CAAgB,OAAhB,EAAyB,YAAM;gCACP9P,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;SADJ;;eAIO0d,KAAP,CAAa1S,EAAb,CAAgB,YAAhB,EAA8B,gBAAQ;mBAC3BkG,KAAP,CAAagH,OAAb,GAAuB,KAAvB;0BACc9S,KAAK+iB,OAAnB;kBACMrc,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;SAHJ;;eAMOwM,KAAP,CAAa1S,EAAb,CAAgB,UAAhB,EAA4B,gBAAQ;mBACzBkG,KAAP,CAAa+F,QAAb,GAAwB7R,KAAKiS,OAA7B;kBACMvL,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,UAA/C;;;gBAGI3E,SAASnH,KAAKiS,OAAd,EAAuB,EAAvB,MAA+B,CAAnC,EAAsC;sBAC5BvL,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;;;;;mBAKGwM,KAAP,CAAamK,WAAb,GAA2B9hB,IAA3B,CAAgC,iBAAS;oBACjCmC,UAAUlI,OAAOkR,KAAP,CAAaoD,QAA3B,EAAqC;2BAC1BpD,KAAP,CAAaoD,QAAb,GAAwBpM,KAAxB;0BACM4D,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;;aAHR;SAXJ;;eAmBOwM,KAAP,CAAa1S,EAAb,CAAgB,QAAhB,EAA0B,YAAM;mBACrBkG,KAAP,CAAagH,OAAb,GAAuB,KAAvB;kBACMpM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,QAA/C;SAFJ;;eAKOwM,KAAP,CAAa1S,EAAb,CAAgB,OAAhB,EAAyB,YAAM;mBACpBkG,KAAP,CAAaoH,MAAb,GAAsB,IAAtB;kBACMxM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,OAA/C;SAFJ;;eAKOwM,KAAP,CAAa1S,EAAb,CAAgB,OAAhB,EAAyB,kBAAU;mBACxBkG,KAAP,CAAawD,KAAb,GAAqB7I,MAArB;kBACMC,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,OAA/C;SAFJ;;;mBAMW;mBAAMV,GAAG4X,KAAH,CAASltB,IAAT,CAAc8E,MAAd,CAAN;SAAX,EAAwC,CAAxC;;CAxWR;;ACpBA;AACA;;AAQA,SAASqoB,cAAT,CAAwBzmB,KAAxB,EAA+B;YACnBA,KAAR;aACS,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,QAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;;mBAGO,SAAP;;;;AAIZ,SAAS0mB,eAAT,CAAyBC,MAAzB,EAAiC;QACzB7nB,MAAMC,EAAN,CAASC,KAAT,CAAe2nB,MAAf,CAAJ,EAA4B;eACjBA,MAAP;;;WAGG7nB,MAAMoR,MAAN,CAAayW,OAAOjZ,GAAP,CAAW;eAAS+Y,eAAeG,KAAf,CAAT;KAAX,CAAb,CAAP;;;;AAIJ,SAASjD,qBAAT,CAA6BnT,IAA7B,EAAmC;QAC3BA,QAAQ,CAAC,KAAKsL,KAAL,CAAW8H,SAAxB,EAAmC;aAC1B9H,KAAL,CAAW8H,SAAX,GAAuB,IAAvB;;QAEA,KAAKtU,KAAL,CAAWoH,MAAX,KAAsBlG,IAA1B,EAAgC;aACvBlB,KAAL,CAAWoH,MAAX,GAAoB,CAAClG,IAArB;cACMtG,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2CkB,OAAO,MAAP,GAAgB,OAA3D;;;;AAIR,IAAM5D,UAAU;SAAA,mBACJ;;;;cAEEiJ,WAAN,CAAkB,KAAKrR,QAAL,CAAcC,OAAhC,EAAyC,KAAKnG,MAAL,CAAYsU,UAAZ,CAAuBkJ,KAAhE,EAAuE,IAAvE;;;gBAGQ+H,cAAR,CAAuBvqB,IAAvB,CAA4B,IAA5B;;;YAGIwF,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOkoB,EAAvB,KAA8B/nB,MAAMC,EAAN,CAAS0K,QAAT,CAAkB9K,OAAOkoB,EAAP,CAAUhC,MAA5B,CAAlC,EAAuE;oBAC3DtF,KAAR,CAAcjmB,IAAd,CAAmB,IAAnB;SADJ,MAEO;;kBAEGyqB,UAAN,CAAiB,KAAKzlB,MAAL,CAAY0lB,IAAZ,CAAiBpX,OAAjB,CAAyBqX,GAA1C,EAA+C5f,KAA/C,CAAqD,iBAAS;sBACrDqM,KAAL,CAAWqC,IAAX,CAAgB,4BAAhB,EAA8CD,KAA9C;aADJ;;;;mBAMOgU,uBAAP,GAAiCnoB,OAAOmoB,uBAAP,IAAkC,EAAnE;;;mBAGOA,uBAAP,CAA+BxS,IAA/B,CAAoC,YAAM;wBAC9BiL,KAAR,CAAcjmB,IAAd,CAAmB,KAAnB;aADJ;;;mBAKOytB,uBAAP,GAAiC,YAAM;uBAC5BD,uBAAP,CAA+BjiB,OAA/B,CAAuC,oBAAY;;iBAAnD;aADJ;;KA3BI;;;;YAAA,oBAoCHmiB,OApCG,EAoCM;;;;;;YAIVloB,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAKqS,KAAL,CAAWmL,YAA7B,CAAJ,EAAgD;sCAC1B,KAAKnL,KAAL,CAAWmL,YAAX,EAD0B;gBACpClW,KADoC,uBACpCA,KADoC;;gBAGxCjS,MAAMC,EAAN,CAASC,KAAT,CAAe+R,KAAf,CAAJ,EAA2B;qBAClBzS,MAAL,CAAYyS,KAAZ,GAAoBA,KAApB;mBACGyO,QAAH,CAAYlmB,IAAZ,CAAiB,IAAjB;;;;;;YAMFkF,MAAM,KAAKF,MAAL,CAAYgD,IAAZ,CAAiB4lB,MAA7B;YACIpoB,MAAMC,EAAN,CAASK,MAAT,CAAgBZ,GAAhB,KAAwB,CAACM,MAAMC,EAAN,CAASC,KAAT,CAAeR,GAAf,CAA7B,EAAkD;gBACxCoD,MAAM9C,MAAMmM,MAAN,CAAa,KAAK3M,MAAL,CAAY0lB,IAAZ,CAAiBpX,OAAjB,CAAyB+B,GAAtC,EAA2CqY,OAA3C,EAAoDxoB,GAApD,CAAZ;;kBAGK0F,KADL,CACWtC,GADX,EAEKuC,IAFL,CAEU,kBAAU;oBACRrF,MAAMC,EAAN,CAASO,MAAT,CAAgB8E,MAAhB,CAAJ,EAA6B;2BACpB9F,MAAL,CAAYyS,KAAZ,GAAoB3M,OAAO+iB,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwBrW,KAA5C;uBACGyO,QAAH,CAAYlmB,IAAZ,CAAiB,MAAjB;;aALZ,EAQK+K,KARL,CAQW,YAAM,EARjB;;KAvDI;;;;kBAAA,4BAoEK;YACPgK,QAAQ,KAAK/P,MAAL,CAAY+P,KAAZ,CAAkB3H,KAAlB,CAAwB,GAAxB,CAAd;aACKlC,QAAL,CAAcC,OAAd,CAAsB/C,KAAtB,CAA4ByiB,aAA5B,GAA+C,MAAM9V,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAhE;KAtEQ;;;;SAAA,mBA0EJ;YACEjQ,SAAS,IAAf;;;YAGMipB,YAAYjpB,OAAOkR,KAAP,CAAajF,YAAb,CAA0B,IAA1B,CAAlB;YACI,CAACvL,MAAMC,EAAN,CAASC,KAAT,CAAeqoB,SAAf,CAAD,IAA8BA,UAAUla,UAAV,CAAqB,UAArB,CAAlC,EAAoE;;;;;YAKhEjB,SAAS9N,OAAOkR,KAAP,CAAajF,YAAb,CAA0B,KAA1B,CAAb;;;YAGIvL,MAAMC,EAAN,CAASC,KAAT,CAAekN,MAAf,CAAJ,EAA4B;qBACf9N,OAAOkR,KAAP,CAAajF,YAAb,CAA0B,KAAK/L,MAAL,CAAYmH,UAAZ,CAAuBqW,KAAvB,CAA6B7hB,EAAvD,CAAT;;;;YAIE+sB,UAAUloB,MAAMwoB,cAAN,CAAqBpb,MAArB,CAAhB;YACMjS,KAAK6E,MAAMyoB,UAAN,CAAiBnpB,OAAOqQ,QAAxB,CAAX;YACMlL,YAAYzE,MAAM+E,aAAN,CAAoB,KAApB,EAA2B,EAAE5J,MAAF,EAA3B,CAAlB;eACOqV,KAAP,GAAexQ,MAAM4lB,cAAN,CAAqBnhB,SAArB,EAAgCnF,OAAOkR,KAAvC,CAAf;;;YAGMkY,YAAY,SAAZA,SAAY;mDAAwCR,OAAxC,SAAmD/b,MAAnD;SAAlB;;;cAGMiV,SAAN,CAAgBsH,UAAU,QAAV,CAAhB,EAAqC,GAArC;SACKnjB,KADL,CACW;mBAAMvF,MAAMohB,SAAN,CAAgBsH,UAAU,IAAV,CAAhB,EAAiC,GAAjC,CAAN;SADX;SAEKnjB,KAFL,CAEW;mBAAMvF,MAAMohB,SAAN,CAAgBsH,UAAU,IAAV,CAAhB,CAAN;SAFX;SAGKrjB,IAHL,CAGU;mBAASyK,GAAG+Q,SAAH,CAAarmB,IAAb,CAAkB8E,MAAlB,EAA0BuE,MAAMF,GAAhC,CAAT;SAHV,EAIK0B,IAJL,CAIU,qBAAa;;gBAEX,CAACqjB,UAAUxf,QAAV,CAAmB,QAAnB,CAAL,EAAmC;uBACxBxD,QAAP,CAAgBib,MAAhB,CAAuB/d,KAAvB,CAA6B+lB,cAA7B,GAA8C,OAA9C;;SAPZ;;;;eAaO3L,KAAP,GAAe,IAAInd,OAAOkoB,EAAP,CAAUhC,MAAd,CAAqB5qB,EAArB,EAAyB;4BAAA;wBAExB;0BACEmE,OAAOE,MAAP,CAAcgmB,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;0BAEElmB,OAAOK,SAAP,CAAiBmQ,EAAjB,GAAsB,CAAtB,GAA0B,CAF5B;qBAGH,CAHG;0BAIE,CAJF;gCAKQ,CALR;gCAMQ,CANR;2BAOG,CAPH;6BAQK,CARL;;;;iCAYSjQ,SAASA,OAAOwS,QAAP,CAAgBlE,IAAzB,GAAgC,IAZzC;;;gCAeQ7O,OAAO+T,QAAP,CAAgB+F,MAAhB,GAAyB,CAAzB,GAA6B,CAfrC;8BAgBM9Z,OAAOE,MAAP,CAAc6T,QAAd,CAAuBgG;aAlBL;oBAoB5B;uBAAA,mBACIrP,KADJ,EACW;;;wBAGPhK,MAAMC,EAAN,CAASO,MAAT,CAAgBlB,OAAOkR,KAAP,CAAawD,KAA7B,CAAJ,EAAyC;;;;wBAInC7I,SAAS;8BACLnB,MAAMtF;qBADhB;;;4BAKQsF,MAAMtF,IAAd;6BACS,CAAL;mCACWkkB,OAAP,GACI,sOADJ;;;6BAIC,CAAL;mCACWA,OAAP,GACI,sHADJ;;;6BAIC,GAAL;mCACWA,OAAP,GACI,oIADJ;;;6BAIC,GAAL;6BACK,GAAL;mCACWA,OAAP,GAAiB,sFAAjB;;;;mCAIOA,OAAP,GAAiB,0BAAjB;;;;2BAIDpY,KAAP,CAAawD,KAAb,GAAqB7I,MAArB;;0BAEMC,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,OAA/C;iBAzCA;uCAAA,qCA2CsB;0BAChBpF,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;iCAC1DlR,OAAOkR,KAAP,CAAayH;qBAD1B;iBA5CA;oCAAA,gCAgDiBjO,KAhDjB,EAgDwB;;wBAElB6e,WAAW7e,MAAMjD,MAAvB;;;2BAGOyJ,KAAP,CAAasY,YAAb,GAA4BD,SAASE,eAAT,EAA5B;;0BAEM3d,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;iBAvDA;uBAAA,mBAyDIxG,KAzDJ,EAyDW;;wBAEL6e,WAAW7e,MAAMjD,MAAvB;;;4BAGQiiB,QAAR,CAAiBxuB,IAAjB,CAAsB8E,MAAtB,EAA8B4oB,OAA9B;;;2BAGO1X,KAAP,CAAakB,IAAb,GAAoB,YAAM;8CACFlX,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;iCACS2pB,SAAT;qBAFJ;;2BAKOzY,KAAP,CAAaqC,KAAb,GAAqB,YAAM;8CACHrY,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;iCACS4pB,UAAT;qBAFJ;;2BAKO1Y,KAAP,CAAa0V,IAAb,GAAoB,YAAM;iCACbiD,SAAT;qBADJ;;2BAIO3Y,KAAP,CAAaoD,QAAb,GAAwBiV,SAAS1B,WAAT,EAAxB;2BACO3W,KAAP,CAAaoH,MAAb,GAAsB,IAAtB;;;2BAGOpH,KAAP,CAAac,WAAb,GAA2B,CAA3B;2BACOT,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,aAApC,EAAmD;2BAAA,iBACzC;mCACKnP,OAAOwnB,SAAS3B,cAAT,EAAP,CAAP;yBAF2C;2BAAA,eAI3Cpb,IAJ2C,EAIrC;;gCAEFxM,OAAOsY,MAAX,EAAmB;uCACRoF,KAAP,CAAa/J,IAAb;;;;mCAIGzC,KAAP,CAAagH,OAAb,GAAuB,IAAvB;kCACMpM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,SAA/C;;;qCAGS8T,MAAT,CAAgBxY,IAAhB;;qBAfR;;;2BAoBO+E,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,cAApC,EAAoD;2BAAA,iBAC1C;mCACKqY,SAASE,eAAT,EAAP;yBAF4C;2BAAA,eAI5C7nB,KAJ4C,EAIrC;qCACEqlB,eAAT,CAAyBrlB,KAAzB;;qBALR;;;2BAUO2P,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,SAApC,EAA+C;2BAAA,iBACrC;mCACKmX,eAAekB,SAASO,kBAAT,EAAf,CAAP;yBAFuC;2BAAA,eAIvCloB,KAJuC,EAIhC;gCACD+W,UAAU/W,KAAhB;;;qCAGSmoB,kBAAT,CAA4B1B,eAAe1P,OAAf,CAA5B;;;kCAGM7M,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;;6BAA1E;;qBAXR;;;wBAkBMkD,MA3EK,GA2EMpU,OAAOE,MA3Eb,CA2ELkU,MA3EK;;2BA4EJ7C,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,QAApC,EAA8C;2BAAA,iBACpC;mCACKkD,MAAP;yBAFsC;2BAAA,eAItCxS,KAJsC,EAI/B;qCACEA,KAAT;qCACSklB,SAAT,CAAmB1S,SAAS,GAA5B;kCACMtI,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,cAA/C;;qBAPR;;;wBAYM0F,KAxFK,GAwFK5W,OAAOE,MAxFZ,CAwFL0W,KAxFK;;2BAyFJrF,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACK0F,KAAP;yBAFqC;2BAAA,eAIrChV,KAJqC,EAI9B;gCACDwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkCgV,KAAjD;oCACQxM,MAAR;qCACSA,SAAS,MAAT,GAAkB,QAA3B;kCACM0B,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,cAA/C;;qBARR;;;2BAaOK,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,YAApC,EAAkD;2BAAA,iBACxC;mCACKqY,SAASnC,WAAT,EAAP;;qBAFR;;;2BAOO7V,cAAP,CAAsBvR,OAAOkR,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACKlR,OAAOgS,WAAP,KAAuBhS,OAAOsU,QAArC;;qBAFR;;;2BAOO7I,OAAP,CAAewO,KAAf,GAAuBsP,SAASS,yBAAT,EAAvB;;;wBAGIhqB,OAAOK,SAAP,CAAiBmQ,EAArB,EAAyB;+BACdU,KAAP,CAAavL,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;;;0BAGEmG,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;0BACMpF,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;;;kCAGclR,OAAOmiB,MAAP,CAAc8H,SAA5B;;;2BAGO9H,MAAP,CAAc8H,SAAd,GAA0BC,YAAY,YAAM;;+BAEjChZ,KAAP,CAAa+F,QAAb,GAAwBsS,SAASY,sBAAT,EAAxB;;;4BAGInqB,OAAOkR,KAAP,CAAakZ,YAAb,KAA8B,IAA9B,IAAsCpqB,OAAOkR,KAAP,CAAakZ,YAAb,GAA4BpqB,OAAOkR,KAAP,CAAa+F,QAAnF,EAA6F;kCACnFnL,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,UAA/C;;;;+BAIGA,KAAP,CAAakZ,YAAb,GAA4BpqB,OAAOkR,KAAP,CAAa+F,QAAzC;;;4BAGIjX,OAAOkR,KAAP,CAAa+F,QAAb,KAA0B,CAA9B,EAAiC;0CACfjX,OAAOmiB,MAAP,CAAc8H,SAA5B;;;kCAGMne,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;;qBAjBkB,EAmBvB,GAnBuB,CAA1B;;;+BAsBW;+BAAMV,GAAG4X,KAAH,CAASltB,IAAT,CAAc8E,MAAd,CAAN;qBAAX,EAAwC,EAAxC;iBAjNA;6BAAA,yBAmNU0K,KAnNV,EAmNiB;;wBAEX6e,WAAW7e,MAAMjD,MAAvB;;;kCAGczH,OAAOmiB,MAAP,CAAclQ,OAA5B;;wBAEMoY,SAASrqB,OAAOkR,KAAP,CAAagH,OAAb,IAAwB,CACnC,CADmC,EAEnC,CAFmC,EAGrCtO,QAHqC,CAG5Bc,MAAMtF,IAHsB,CAAvC;;wBAKIilB,MAAJ,EAAY;;+BAEDnZ,KAAP,CAAagH,OAAb,GAAuB,KAAvB;8BACMpM,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,QAA/C;;;;;;;;;;4BAUIxG,MAAMtF,IAAd;6BACS,CAAC,CAAN;;kCAEU0G,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;;;mCAGOA,KAAP,CAAa+F,QAAb,GAAwBsS,SAASY,sBAAT,EAAxB;kCACMre,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,UAA/C;;;;6BAIC,CAAL;kDACwBhW,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;;;gCAGIA,OAAOkR,KAAP,CAAa4P,IAAjB,EAAuB;;yCAEV+I,SAAT;yCACSF,SAAT;6BAHJ,MAIO;sCACG7d,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,OAA/C;;;;;6BAKH,CAAL;;gCAEQlR,OAAOkR,KAAP,CAAaoH,MAAb,IAAuB,CAACtY,OAAO0d,KAAP,CAAa8H,SAAzC,EAAoD;uCACzCtU,KAAP,CAAaqC,KAAb;6BADJ,MAEO;sDACiBrY,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;;sCAEM8L,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,SAA/C;;;uCAGOiR,MAAP,CAAclQ,OAAd,GAAwBiY,YAAY,YAAM;0CAChCpe,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,YAA/C;iCADoB,EAErB,EAFqB,CAAxB;;;;;oCAOIlR,OAAOkR,KAAP,CAAaoD,QAAb,KAA0BiV,SAAS1B,WAAT,EAA9B,EAAsD;2CAC3C3W,KAAP,CAAaoD,QAAb,GAAwBiV,SAAS1B,WAAT,EAAxB;0CACM/b,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOkR,KAAxC,EAA+C,gBAA/C;;;;yCAIK6K,cAAT,CAAwB7gB,IAAxB,CAA6B8E,MAA7B,EAAqCsoB,gBAAgBiB,SAASe,yBAAT,EAAhB,CAArC;;;;;6BAKH,CAAL;;gCAEQ,CAACtqB,OAAO4W,KAAZ,EAAmB;uCACR8G,KAAP,CAAa6M,MAAb;;kDAEgBrvB,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;;;;;;;;0BAQF8L,aAAN,CAAoB5Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOoG,QAAP,CAAgBjB,SAAjD,EAA4D,aAA5D,EAA2E,KAA3E,EAAkF;8BACxEuF,MAAMtF;qBADhB;;;SAlUG,CAAf;;CAlHR;;AC7EA;AACA;AAQA,IAAM8L,QAAQ;;SAAA,mBAEF;;YAEA,CAAC,KAAKA,KAAV,EAAiB;iBACRoB,KAAL,CAAWqC,IAAX,CAAgB,yBAAhB;;;;;cAKE8C,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBpN,IAAvB,CAA4BuB,OAA5B,CAAoC,KAApC,EAA2C,KAAKvB,IAAhD,CAA3C,EAAkG,IAAlG;;;cAGMqQ,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBnE,QAAvB,CAAgC1H,OAAhC,CAAwC,KAAxC,EAA+C,KAAK0H,QAApD,CAA3C,EAA0G,IAA1G;;;;YAII,KAAKoR,OAAT,EAAkB;kBACRhK,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBpN,IAAvB,CAA4BuB,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAA3C,EAAgG,IAAhG;;;;YAIA,KAAK0I,OAAT,EAAkB;;iBAETjL,QAAL,CAAcC,OAAd,GAAwB3F,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uBACxC,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuB3D;aADV,CAAxB;;;kBAKMtR,IAAN,CAAW,KAAK2R,KAAhB,EAAuB,KAAK9K,QAAL,CAAcC,OAArC;;;iBAGKD,QAAL,CAAcib,MAAd,GAAuB3gB,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uBACvC,KAAKvF,MAAL,CAAYsU,UAAZ,CAAuB6M;aADX,CAAvB;;iBAIKjb,QAAL,CAAcC,OAAd,CAAsBa,WAAtB,CAAkC,KAAKd,QAAL,CAAcib,MAAhD;;;YAGA,KAAKI,OAAT,EAAkB;oBACN,KAAKpR,QAAb;qBACS,SAAL;4BACYwQ,KAAR,CAAc3lB,IAAd,CAAmB,IAAnB;;;qBAGC,OAAL;0BACU2lB,KAAN,CAAY3lB,IAAZ,CAAiB,IAAjB;;;;;;SAPZ,MAaO,IAAI,KAAKiW,OAAT,EAAkB;kBACf/P,MAAN,CAAalG,IAAb,CAAkB,IAAlB;;;CArDZ;;ACTA;AACA;IAUMsvB;;;;;;iBAMUxqB,MAAZ,EAAoB;;;;;aACXA,MAAL,GAAcA,MAAd;aACKyqB,WAAL,GAAmBzqB,OAAOE,MAAP,CAAc2jB,GAAd,CAAkB4G,WAArC;aACKxY,OAAL,GAAe,KAAf;aACK6R,WAAL,GAAmB,KAAnB;aACK1d,QAAL,GAAgB;uBACD,IADC;8BAEM;SAFtB;aAIKskB,OAAL,GAAe,IAAf;aACKC,MAAL,GAAc,IAAd;aACKC,SAAL,GAAiB,IAAjB;aACKpf,MAAL,GAAc,EAAd;aACKqf,WAAL,GAAmB,IAAnB;aACKC,cAAL,GAAsB,IAAtB;;;aAGK/G,cAAL,GAAsB,IAAIpnB,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;;kBAE9CqH,EAAL,CAAQ,QAAR,EAAkBtH,OAAlB;;;kBAGKsH,EAAL,CAAQ,OAAR,EAAiBrH,MAAjB;SALkB,CAAtB;;aAQKwO,IAAL;;;;;;;;;;+BAUG;;;gBACC,KAAKlS,OAAT,EAAkB;;oBAEV,CAACS,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOuoB,MAAvB,CAAD,IAAmC,CAACpoB,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOuoB,MAAP,CAAciC,GAA9B,CAAxC,EAA4E;0BAEnEpF,UADL,CACgB,KAAK3lB,MAAL,CAAYE,MAAZ,CAAmB0lB,IAAnB,CAAwBoF,SAAxB,CAAkCnF,GADlD,EAEK9f,IAFL,CAEU,YAAM;+BACHob,KAAL;qBAHR,EAKKlb,KALL,CAKW,YAAM;;+BAEJglB,OAAL,CAAa,OAAb,EAAsB,IAAIhnB,KAAJ,CAAU,+BAAV,CAAtB;qBAPR;iBADJ,MAUO;yBACEkd,KAAL;;;;;;;;;;;gCAQJ;;;;;iBAGC+J,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B;;;iBAGKnH,cAAL,CAAoBhe,IAApB,CAAyB,YAAM;uBACtBolB,gBAAL,CAAsB,sBAAtB;aADJ;;;iBAKKxK,SAAL;;;iBAGKyK,QAAL;;;;;;;;;;;;;;;;;mCA4BO;;iBAEFhlB,QAAL,CAAcjB,SAAd,GAA0BzE,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;uBAC1C,KAAKzF,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BqP;aADf,CAA1B;iBAGK7jB,MAAL,CAAYoG,QAAZ,CAAqBjB,SAArB,CAA+B+B,WAA/B,CAA2C,KAAKd,QAAL,CAAcjB,SAAzD;;;mBAGO4lB,GAAP,CAAWjX,QAAX,CAAoBuX,YAApB,CAAiCvC,OAAOiC,GAAP,CAAWO,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE;;;mBAGOT,GAAP,CAAWjX,QAAX,CAAoB2X,SAApB,CAA8B,KAAKzrB,MAAL,CAAYE,MAAZ,CAAmB2jB,GAAnB,CAAuB9J,QAArD;;;;iBAIK3T,QAAL,CAAcslB,gBAAd,GAAiC,IAAI5C,OAAOiC,GAAP,CAAWY,kBAAf,CAAkC,KAAKvlB,QAAL,CAAcjB,SAAhD,CAAjC;;;iBAGKymB,UAAL;;;;;;;;;qCAMS;;;gBACDzmB,SADC,GACa,KAAKnF,MAAL,CAAYoG,QADzB,CACDjB,SADC;;;gBAGL;;qBAEKwlB,MAAL,GAAc,IAAI7B,OAAOiC,GAAP,CAAWc,SAAf,CAAyB,KAAKzlB,QAAL,CAAcslB,gBAAvC,CAAd;;;qBAGKf,MAAL,CAAY7mB,gBAAZ,CAA6BglB,OAAOiC,GAAP,CAAWe,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAAnE,EAAuF;2BAAS,OAAKC,kBAAL,CAAwBvhB,KAAxB,CAAT;iBAAvF,EAAgI,KAAhI;qBACKigB,MAAL,CAAY7mB,gBAAZ,CAA6BglB,OAAOiC,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE;2BAAS,OAAKC,SAAL,CAAe1X,KAAf,CAAT;iBAApE,EAAoG,KAApG;;;oBAGM9Q,UAAU,IAAIklB,OAAOiC,GAAP,CAAWsB,UAAf,EAAhB;wBACQC,QAAR,GAAmB,KAAKC,MAAxB;;;;wBAIQC,iBAAR,GAA4BrnB,UAAUsnB,WAAtC;wBACQC,kBAAR,GAA6BvnB,UAAUiL,YAAvC;wBACQuc,oBAAR,GAA+BxnB,UAAUsnB,WAAzC;wBACQG,qBAAR,GAAgCznB,UAAUiL,YAA1C;;;wBAGQyc,sBAAR,GAAiC,KAAjC;;;wBAGQC,kBAAR,CAA2B,CAAC,KAAK9sB,MAAL,CAAY4W,KAAxC;;qBAEK+T,MAAL,CAAYiB,UAAZ,CAAuBhoB,OAAvB;aAzBJ,CA0BE,OAAOnC,CAAP,EAAU;qBACH2qB,SAAL,CAAe3qB,CAAf;;;;;;;;;;;wCAQqB;;;gBAAfqH,KAAe,uEAAP,KAAO;;gBACrB,CAACA,KAAL,EAAY;8BACM,KAAKgiB,cAAnB;qBACK1kB,QAAL,CAAcjB,SAAd,CAAwBiE,eAAxB,CAAwC,iBAAxC;;;;gBAIElE,SAAS,SAATA,MAAS,GAAM;oBACXsH,OAAO9L,MAAMkM,UAAN,CAAiB1G,KAAKmG,GAAL,CAAS,OAAKqe,OAAL,CAAaqC,gBAAb,EAAT,EAA0C,CAA1C,CAAjB,CAAb;oBACMpX,QAAWnD,KAAKrR,GAAL,CAAS,eAAT,EAA0B,OAAKnB,MAAL,CAAYE,MAAtC,CAAX,WAA8DsM,IAApE;uBACKpG,QAAL,CAAcjB,SAAd,CAAwBQ,YAAxB,CAAqC,iBAArC,EAAwDgQ,KAAxD;aAHJ;;iBAMKmV,cAAL,GAAsBZ,YAAYhlB,MAAZ,EAAoB,GAApB,CAAtB;;;;;;;;;;2CAOewF,OAAO;;;;gBAEhBoJ,WAAW,IAAIgV,OAAOiC,GAAP,CAAWiC,oBAAf,EAAjB;;;qBAGSC,2CAAT,GAAuD,IAAvD;qBACSC,gBAAT,GAA4B,IAA5B;;;;iBAIKxC,OAAL,GAAehgB,MAAMyiB,aAAN,CAAoB,KAAKntB,MAAzB,EAAiC8T,QAAjC,CAAf;;;iBAGK8W,SAAL,GAAiB,KAAKF,OAAL,CAAa0C,YAAb,EAAjB;;;gBAGI,CAAC1sB,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKgqB,SAApB,CAAL,EAAqC;qBAC5BA,SAAL,CAAenkB,OAAf,CAAuB,oBAAY;wBAC3B4mB,aAAa,CAAb,IAAkBA,aAAa,CAAC,CAAhC,IAAqCA,WAAW,OAAKrtB,MAAL,CAAYsU,QAAhE,EAA0E;4BAChEgZ,cAAc,OAAKttB,MAAL,CAAYoG,QAAZ,CAAqB6N,QAAzC;;4BAEIvT,MAAMC,EAAN,CAAS+F,OAAT,CAAiB4mB,WAAjB,CAAJ,EAAmC;gCACzBC,gBAAgB,MAAM,OAAKvtB,MAAL,CAAYsU,QAAlB,GAA6B+Y,QAAnD;gCACMpP,MAAMvd,MAAM+E,aAAN,CAAoB,MAApB,EAA4B;uCAC7B,OAAKzF,MAAL,CAAYE,MAAZ,CAAmBsU,UAAnB,CAA8BuJ;6BAD7B,CAAZ;;gCAIIza,KAAJ,CAAUsU,IAAV,GAAoB2V,cAAcpwB,QAAd,EAApB;wCACY+J,WAAZ,CAAwB+W,GAAxB;;;iBAXZ;;;;;;;;iBAsBCyM,OAAL,CAAa5D,SAAb,CAAuB,KAAK9mB,MAAL,CAAYoU,MAAnC;;;;iBAIKsW,OAAL,CAAa5mB,gBAAb,CAA8BglB,OAAOiC,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE;uBAAS,OAAKC,SAAL,CAAe1X,KAAf,CAAT;aAArE;;;mBAGOxR,IAAP,CAAY4lB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAA/B,EAAqCtlB,OAArC,CAA6C,gBAAQ;uBAC5CikB,OAAL,CAAa5mB,gBAAb,CAA8BglB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB3kB,IAAxB,CAA9B,EAA6D;2BAAS,OAAKqmB,SAAL,CAAe/iB,KAAf,CAAT;iBAA7D;aADJ;;;iBAKKugB,OAAL,CAAa,QAAb;;;;;;;;;;;;kCASMvgB,OAAO;;;gBACLvF,SADK,GACS,KAAKnF,MAAL,CAAYoG,QADrB,CACLjB,SADK;;;;;gBAKPuoB,KAAKhjB,MAAMijB,KAAN,EAAX;;;gBAGM7hB,gBAAgB,SAAhBA,aAAgB,OAAQ;oBACpBpB,gBAActD,KAAKuB,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuB8E,WAAvB,EAApB;sBACM3B,aAAN,CAAoB5Q,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC,OAAKA,MAAL,CAAYkR,KAAlD,EAAyDxG,KAAzD;aAFJ;;oBAKQA,MAAMtD,IAAd;qBACS0hB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;;;yBAGS3C,OAAL,CAAa,QAAb;;;kCAGcvgB,MAAMtD,IAApB;;;yBAGKymB,aAAL,CAAmB,IAAnB;;wBAEI,CAACH,GAAGI,QAAH,EAAL,EAAoB;;2BAEble,KAAH,GAAWzK,UAAUsnB,WAArB;2BACG5c,MAAH,GAAY1K,UAAUiL,YAAtB;;;;;;;qBAOH0Y,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;;;;;kCAKkBrjB,MAAMtD,IAApB;;;;;;;;;;;;;;;;;;;;;;;;;yBAyBK4mB,OAAL;;;qBAGClF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;;;;;kCAKkBvjB,MAAMtD,IAApB;;yBAEK8mB,YAAL;;;;qBAICpF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;;;;;;kCAMkBzjB,MAAMtD,IAApB;;yBAEKymB,aAAL;;yBAEKO,aAAL;;;;qBAICtF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;qBACKvF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;qBACKxF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;qBACKzF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;qBACK1F,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;kCACkB/jB,MAAMtD,IAApB;;;;;;;;;;;;;;;kCAYFsD,OAAO;iBACRgkB,MAAL;iBACK1uB,MAAL,CAAYsS,KAAZ,CAAkBqC,IAAlB,CAAuB,WAAvB,EAAoCjK,KAApC;;;;;;;;;;;oCAQQ;;;gBACAvF,SADA,GACc,KAAKnF,MAAL,CAAYoG,QAD1B,CACAjB,SADA;;gBAEJqH,aAAJ;;;iBAGKxM,MAAL,CAAYgL,EAAZ,CAAe,OAAf,EAAwB,YAAM;uBACrB2f,MAAL,CAAYgE,eAAZ;aADJ;;iBAIK3uB,MAAL,CAAYgL,EAAZ,CAAe,SAAf,EAA0B,YAAM;uBACrB,OAAKhL,MAAL,CAAYgS,WAAnB;uBACOxF,IAAP;aAFJ;;iBAKKxM,MAAL,CAAYgL,EAAZ,CAAe,QAAf,EAAyB,YAAM;oBACrB4jB,aAAa,OAAK5uB,MAAL,CAAYgS,WAA/B;;oBAEItR,MAAMC,EAAN,CAASC,KAAT,CAAe,OAAKgqB,SAApB,CAAJ,EAAoC;;;;uBAI/BA,SAAL,CAAenkB,OAAf,CAAuB,UAAC4mB,QAAD,EAAW1mB,KAAX,EAAqB;wBACpC6F,OAAO6gB,QAAP,IAAmBA,WAAWuB,UAAlC,EAA8C;+BACrClE,OAAL,CAAamE,cAAb;+BACKjE,SAAL,CAAekE,MAAf,CAAsBnoB,KAAtB,EAA6B,CAA7B;;iBAHR;aAPJ;;;;mBAiBO7C,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;oBAChC,OAAK4mB,OAAT,EAAkB;2BACTA,OAAL,CAAaqE,MAAb,CAAoB5pB,UAAUsnB,WAA9B,EAA2CtnB,UAAUiL,YAArD,EAAmE0Y,OAAOiC,GAAP,CAAWiE,QAAX,CAAoBC,MAAvF;;aAFR;;;;;;;;;+BAUG;;;gBACK9pB,SADL,GACmB,KAAKnF,MAAL,CAAYoG,QAD/B,CACKjB,SADL;;;gBAGC,CAAC,KAAK4e,cAAV,EAA0B;qBACjBqK,aAAL;;;;iBAICrK,cAAL,CACKhe,IADL,CACU,YAAM;;uBAEHK,QAAL,CAAcslB,gBAAd,CAA+BwD,UAA/B;;oBAEI;wBACI,CAAC,OAAKpL,WAAV,EAAuB;;+BAEd4G,OAAL,CAAayE,IAAb,CAAkBhqB,UAAUsnB,WAA5B,EAAyCtnB,UAAUiL,YAAnD,EAAiE0Y,OAAOiC,GAAP,CAAWiE,QAAX,CAAoBC,MAArF;;;;+BAIKvE,OAAL,CAAa5hB,KAAb;;;2BAGCgb,WAAL,GAAmB,IAAnB;iBAVJ,CAWE,OAAOsL,OAAP,EAAgB;;;2BAGThD,SAAL,CAAegD,OAAf;;aAnBZ,EAsBKnpB,KAtBL,CAsBW,YAAM,EAtBjB;;;;;;;;;wCA4BY;;iBAEPG,QAAL,CAAcjB,SAAd,CAAwB7B,KAAxB,CAA8B+rB,MAA9B,GAAuC,EAAvC;;;iBAGKpd,OAAL,GAAe,KAAf;;;gBAGI,KAAKjS,MAAL,CAAYgS,WAAZ,GAA0B,KAAKhS,MAAL,CAAYsU,QAA1C,EAAoD;qBAC3CtU,MAAL,CAAYoS,IAAZ;;;;;;;;;;uCAOO;;iBAENhM,QAAL,CAAcjB,SAAd,CAAwB7B,KAAxB,CAA8B+rB,MAA9B,GAAuC,CAAvC;;;iBAGKpd,OAAL,GAAe,IAAf;;;iBAGKjS,MAAL,CAAYuT,KAAZ;;;;;;;;;;;;iCASK;;gBAED,KAAKuQ,WAAT,EAAsB;qBACbsK,aAAL;;;;iBAICnD,OAAL,CAAa,OAAb;;;iBAGK+C,OAAL;;;;;;;;;kCAMM;;;;iBAEDjK,cAAL,CACKhe,IADL,CACU,YAAM;;oBAEJ,QAAK2kB,OAAT,EAAkB;4BACTA,OAAL,CAAa4E,OAAb;;;;wBAICvL,cAAL,GAAsB,IAAIpnB,OAAJ,CAAY,mBAAW;4BACpCqO,EAAL,CAAQ,QAAR,EAAkBtH,OAAlB;4BACK1D,MAAL,CAAYsS,KAAZ,CAAkBC,GAAlB,CAAsB,QAAKmY,OAA3B;iBAFkB,CAAtB;;;wBAMKkB,UAAL;aAdR,EAgBK3lB,KAhBL,CAgBW,YAAM,EAhBjB;;;;;;;;;;gCAuBIyE,OAAgB;;;8CAANyB,IAAM;oBAAA;;;gBACdojB,WAAW,KAAK/jB,MAAL,CAAYd,KAAZ,CAAjB;;gBAEIhK,MAAMC,EAAN,CAASqC,KAAT,CAAeusB,QAAf,CAAJ,EAA8B;yBACjB9oB,OAAT,CAAiB,mBAAW;wBACpB/F,MAAMC,EAAN,CAAS0K,QAAT,CAAkB5G,OAAlB,CAAJ,EAAgC;gCACpB+qB,KAAR,CAAc,OAAd,EAAoBrjB,IAApB;;iBAFR;;;;;;;;;;;;;2BAcLzB,OAAOQ,UAAU;gBACZ,CAACxK,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAKwI,MAAL,CAAYd,KAAZ,CAAf,CAAL,EAAyC;qBAChCc,MAAL,CAAYd,KAAZ,IAAqB,EAArB;;;iBAGCc,MAAL,CAAYd,KAAZ,EAAmBwL,IAAnB,CAAwBhL,QAAxB;;mBAEO,IAAP;;;;;;;;;;;;;;yCAWasB,MAAMjG,MAAM;;;iBACpBvG,MAAL,CAAYsS,KAAZ,CAAkBC,GAAlB,iCAAoDhM,IAApD;;iBAEKskB,WAAL,GAAmBzI,WAAW,YAAM;wBAC3BsM,MAAL;wBACKvD,gBAAL,CAAsB,oBAAtB;aAFe,EAGhB3e,IAHgB,CAAnB;;;;;;;;;;yCAUajG,MAAM;gBACf,CAAC7F,MAAMC,EAAN,CAASyB,eAAT,CAAyB,KAAKyoB,WAA9B,CAAL,EAAiD;qBACxC7qB,MAAL,CAAYsS,KAAZ,CAAkBC,GAAlB,iCAAoDhM,IAApD;;6BAEa,KAAKskB,WAAlB;qBACKA,WAAL,GAAmB,IAAnB;;;;;4BA1hBM;mBACH,KAAK7qB,MAAL,CAAYqR,OAAZ,IAAuB,KAAKrR,MAAL,CAAYE,MAAZ,CAAmB2jB,GAAnB,CAAuB5jB,OAA9C,IAAyD,CAACS,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK6pB,WAApB,CAAjE;;;;4BA8CS;gBACHvb,SAAS;gCACK,0BADL;8BAEG,0BAFH;wBAGH6D,SAAS4J,QAHN;oBAIP8S,KAAKC,GAAL,EAJO;0BAKD,GALC;2BAMA,GANA;0BAOD,KAAKjF;aAPnB;;gBAUMkF,OAAO,4CAAb;;mBAEUA,IAAV,SAAkBjvB,MAAMylB,cAAN,CAAqBjX,MAArB,CAAlB;;;;;;ACzGR;AACA;AAUA,IAAMpB,SAAS;;kBAAA,0BAEI1G,IAFJ,EAEUC,UAFV,EAEsB;;;YACzB3G,MAAMC,EAAN,CAASK,MAAT,CAAgBqG,UAAhB,CAAJ,EAAiC;kBACvBuoB,aAAN,CAAoBxoB,IAApB,EAA0B,KAAK8J,KAA/B,EAAsC;qBAC7B7J;aADT;SADJ,MAIO,IAAI3G,MAAMC,EAAN,CAASqC,KAAT,CAAeqE,UAAf,CAAJ,EAAgC;uBACxBZ,OAAX,CAAmB,qBAAa;sBACtBmpB,aAAN,CAAoBxoB,IAApB,EAA0B,MAAK8J,KAA/B,EAAsC2e,SAAtC;aADJ;;KARG;;;;;UAAA,kBAgBJjuB,KAhBI,EAgBG;;;YACN,CAAClB,MAAMC,EAAN,CAASO,MAAT,CAAgBU,KAAhB,CAAD,IAA2B,EAAE,aAAaA,KAAf,CAA3B,IAAoD,CAACA,MAAMiM,OAAN,CAAc5M,MAAvE,EAA+E;iBACtEqR,KAAL,CAAWqC,IAAX,CAAgB,uBAAhB;;;;;cAKEmb,cAAN,CAAqB50B,IAArB,CAA0B,IAA1B;;;aAGKo0B,OAAL,CAAap0B,IAAb,CACI,IADJ,EAEI,YAAM;;mBAEGuQ,OAAL,CAAakN,OAAb,GAAuB,EAAvB;;;kBAGMjR,aAAN,CAAoB,OAAKwJ,KAAzB;mBACKA,KAAL,GAAa,IAAb;;;gBAGIxQ,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,OAAKN,QAAL,CAAcjB,SAA/B,CAAJ,EAA+C;uBACtCiB,QAAL,CAAcjB,SAAd,CAAwBiE,eAAxB,CAAwC,OAAxC;;;;mBAIChC,IAAL,GAAYxF,MAAMwF,IAAlB;mBACKiJ,QAAL,GAAgB,CAAC3P,MAAMC,EAAN,CAASC,KAAT,CAAegB,MAAMiM,OAAN,CAAc,CAAd,EAAiBwC,QAAhC,CAAD,GAA6CzO,MAAMiM,OAAN,CAAc,CAAd,EAAiBwC,QAA9D,GAAyE3O,UAAUiQ,KAAnG;;;mBAGKtR,SAAL,GAAiBqL,QAAQqkB,KAAR,CAAc,OAAK3oB,IAAnB,EAAyB,OAAKiJ,QAA9B,EAAwC,OAAKnQ,MAAL,CAAYoQ,WAApD,CAAjB;;;oBAGW,OAAKD,QAAhB,SAA4B,OAAKjJ,IAAjC;qBACS,aAAL;2BACS8J,KAAL,GAAaxQ,MAAM+E,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,aAAL;2BACSyL,KAAL,GAAaxQ,MAAM+E,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,eAAL;qBACK,aAAL;2BACSyL,KAAL,GAAaxQ,MAAM+E,aAAN,CAAoB,KAApB,EAA2B;6BAC/B7D,MAAMiM,OAAN,CAAc,CAAd,EAAiBxJ;qBADb,CAAb;;;;;;;;mBAUH+B,QAAL,CAAcjB,SAAd,CAAwB+B,WAAxB,CAAoC,OAAKgK,KAAzC;;;gBAGIxQ,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,MAAMskB,QAAvB,CAAJ,EAAsC;uBAC7BhmB,MAAL,CAAYgmB,QAAZ,GAAuBtkB,MAAMskB,QAA7B;;;;gBAIA,OAAK/U,OAAT,EAAkB;oBACV,OAAKjR,MAAL,CAAY8vB,WAAhB,EAA6B;2BACpB9e,KAAL,CAAWvL,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;oBAEA,OAAKzF,MAAL,CAAYgmB,QAAhB,EAA0B;2BACjBhV,KAAL,CAAWvL,YAAX,CAAwB,UAAxB,EAAoC,EAApC;;oBAEA,CAACjF,MAAMC,EAAN,CAASC,KAAT,CAAegB,MAAMyf,MAArB,CAAL,EAAmC;2BAC1BA,MAAL,GAAczf,MAAMyf,MAApB;;oBAEA,OAAKnhB,MAAL,CAAY4gB,IAAZ,CAAiBhH,MAArB,EAA6B;2BACpB5I,KAAL,CAAWvL,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;;oBAEA,OAAKzF,MAAL,CAAY0W,KAAhB,EAAuB;2BACd1F,KAAL,CAAWvL,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;;oBAEA,OAAKzF,MAAL,CAAYoQ,WAAhB,EAA6B;2BACpBY,KAAL,CAAWvL,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;;;;eAKLsqB,YAAH,CAAgB/0B,IAAhB,CAAqB,MAArB;;;gBAGI,OAAKiW,OAAT,EAAkB;uBACP+e,cAAP,CAAsBh1B,IAAtB,CAA2B,MAA3B,EAAiC,QAAjC,EAA2C0G,MAAMiM,OAAjD;;;;mBAIC3N,MAAL,CAAYyS,KAAZ,GAAoB/Q,MAAM+Q,KAA1B;;;kBAGMkO,KAAN,CAAY3lB,IAAZ,CAAiB,MAAjB;;;gBAGI,OAAKiW,OAAT,EAAkB;;oBAEV,YAAYvP,KAAhB,EAAuB;2BACZsuB,cAAP,CAAsBh1B,IAAtB,CAA2B,MAA3B,EAAiC,OAAjC,EAA0C0G,MAAM+X,MAAhD;;;;uBAICzI,KAAL,CAAWiB,IAAX;;;;gBAIA,OAAKhB,OAAL,IAAiB,OAAKsQ,OAAL,IAAgB,CAAC,OAAKphB,SAAL,CAAemQ,EAArD,EAA0D;;mBAEnD4X,KAAH,CAASltB,IAAT,CAAc,MAAd;;;;mBAIC8Y,UAAL,CAAgB9O,MAAhB;SAzGR,EA2GI,IA3GJ;;CA1BR;;ACXA;AACA;;;;;;;IA0BMirB;kBACU1oB,MAAZ,EAAoBgE,OAApB,EAA6B;;;;;aACpB0W,MAAL,GAAc,EAAd;;;aAGKhB,KAAL,GAAa,KAAb;aACKe,OAAL,GAAe,KAAf;aACKkO,MAAL,GAAc,KAAd;;;aAGK1Y,KAAL,GAAahM,QAAQgM,KAArB;;;aAGKxG,KAAL,GAAazJ,MAAb;;;YAGI/G,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKkQ,KAArB,CAAJ,EAAiC;iBACxBA,KAAL,GAAajc,SAAS0U,gBAAT,CAA0B,KAAKuH,KAA/B,CAAb;;;;YAIC3Q,OAAO8vB,MAAP,IAAiB,KAAKnf,KAAL,YAAsBmf,MAAxC,IAAmD3vB,MAAMC,EAAN,CAASsC,QAAT,CAAkB,KAAKiO,KAAvB,CAAnD,IAAoFxQ,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAKkO,KAApB,CAAxF,EAAoH;;iBAE3GA,KAAL,GAAa,KAAKA,KAAL,CAAW,CAAX,CAAb;;;;aAIChR,MAAL,GAAcQ,MAAMU,MAAN,CACV,EADU,EAEVsd,UAFU,EAGVyR,KAAKzR,QAHK,EAIVjT,WAAW,EAJD,EAKT,YAAM;gBACC;uBACO3K,KAAKC,KAAL,CAAW,MAAKmQ,KAAL,CAAWjF,YAAX,CAAwB,kBAAxB,CAAX,CAAP;aADJ,CAEE,OAAOxK,CAAP,EAAU;uBACD,EAAP;;SAJR,EALU,CAAd;;;aAeK2E,QAAL,GAAgB;uBACD,IADC;qBAEH,EAFG;qBAGH,EAHG;sBAIF,EAJE;oBAKJ,EALI;sBAMF;sBACA,IADA;uBAEC,EAFD;sBAGA;aATE;sBAWF;SAXd;;;aAeK2N,QAAL,GAAgB;oBACJ,IADI;0BAEE,CAAC,CAFH;kBAGN,IAAIxR,OAAJ;SAHV;;;aAOKyR,UAAL,GAAkB;oBACN;SADZ;;;aAKKvI,OAAL,GAAe;mBACJ,EADI;qBAEF;SAFb;;;;aAOK6G,KAAL,GAAa,IAAIkM,OAAJ,CAAY,KAAKte,MAAL,CAAYoS,KAAxB,CAAb;;;aAGKA,KAAL,CAAWC,GAAX,CAAe,QAAf,EAAyB,KAAKrS,MAA9B;aACKoS,KAAL,CAAWC,GAAX,CAAe,SAAf,EAA0B7G,OAA1B;;;YAGIhL,MAAMC,EAAN,CAASyB,eAAT,CAAyB,KAAK8O,KAA9B,KAAwC,CAACxQ,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKwK,KAAtB,CAA7C,EAA2E;iBAClEoB,KAAL,CAAWoC,KAAX,CAAiB,0CAAjB;;;;;YAKA,KAAKxD,KAAL,CAAWof,IAAf,EAAqB;iBACZhe,KAAL,CAAWqC,IAAX,CAAgB,sBAAhB;;;;;YAKA,CAAC,KAAKzU,MAAL,CAAYD,OAAjB,EAA0B;iBACjBqS,KAAL,CAAWoC,KAAX,CAAiB,kCAAjB;;;;;;YAMA,CAAChJ,QAAQqkB,KAAR,GAAgBxf,GAArB,EAA0B;iBACjB+B,KAAL,CAAWoC,KAAX,CAAiB,0BAAjB;;;;;YAKEiG,QAAQ,KAAKzJ,KAAL,CAAWrK,SAAX,CAAqB,IAArB,CAAd;cACMqf,QAAN,GAAiB,KAAjB;aACK9f,QAAL,CAAcmqB,QAAd,GAAyB5V,KAAzB;;;;YAIMvT,OAAO,KAAK8J,KAAL,CAAWsf,OAAX,CAAmB/iB,WAAnB,EAAb;;;YAGIiU,SAAS,IAAb;YACIle,MAAM,IAAV;YACI0L,SAAS,IAAb;;;gBAGQ9H,IAAR;iBACS,KAAL;;yBAEa,KAAK8J,KAAL,CAAWjH,aAAX,CAAyB,QAAzB,CAAT;;;oBAGIvJ,MAAMC,EAAN,CAAS+F,OAAT,CAAiBgb,MAAjB,CAAJ,EAA8B;;0BAEpBA,OAAOzV,YAAP,CAAoB,KAApB,CAAN;yBACKoE,QAAL,GAAgB3P,MAAM+vB,gBAAN,CAAuBjtB,GAAvB,CAAhB;;;yBAGK4C,QAAL,CAAcjB,SAAd,GAA0B,KAAK+L,KAA/B;yBACKA,KAAL,GAAawQ,MAAb;;;yBAGKtb,QAAL,CAAcjB,SAAd,CAAwBuD,SAAxB,GAAoC,EAApC;;;6BAGShI,MAAMgwB,YAAN,CAAmBltB,GAAnB,CAAT;wBACI,CAAC9C,MAAMC,EAAN,CAASC,KAAT,CAAesO,MAAf,CAAL,EAA6B;4BACnByhB,SAAS,CACX,GADW,EAEX,MAFW,CAAf;;4BAKIA,OAAO/mB,QAAP,CAAgBsF,OAAOgX,QAAvB,CAAJ,EAAsC;iCAC7BhmB,MAAL,CAAYgmB,QAAZ,GAAuB,IAAvB;;4BAEAyK,OAAO/mB,QAAP,CAAgBsF,OAAO4R,IAAvB,CAAJ,EAAkC;iCACzB5gB,MAAL,CAAY4gB,IAAZ,CAAiBhH,MAAjB,GAA0B,IAA1B;;;;;4BAKA,KAAKyC,SAAT,EAAoB;iCACXrc,MAAL,CAAYoQ,WAAZ,GAA0BqgB,OAAO/mB,QAAP,CAAgBsF,OAAOoB,WAAvB,CAA1B;yBADJ,MAEO;iCACEpQ,MAAL,CAAYoQ,WAAZ,GAA0B,IAA1B;;;iBAhCZ,MAmCO;;yBAEED,QAAL,GAAgB,KAAKa,KAAL,CAAWjF,YAAX,CAAwB,KAAK/L,MAAL,CAAYmH,UAAZ,CAAuBqW,KAAvB,CAA6BrN,QAArD,CAAhB;;;yBAGKa,KAAL,CAAW9H,eAAX,CAA2B,KAAKlJ,MAAL,CAAYmH,UAAZ,CAAuBqW,KAAvB,CAA6BrN,QAAxD;;;;oBAIA3P,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKyP,QAApB,KAAiC,CAACvO,OAAOoB,IAAP,CAAYxB,SAAZ,EAAuBkI,QAAvB,CAAgC,KAAKyG,QAArC,CAAtC,EAAsF;yBAC7EiC,KAAL,CAAWoC,KAAX,CAAiB,gCAAjB;;;;;qBAKCtN,IAAL,GAAYzF,MAAMkP,KAAlB;;;;iBAIC,OAAL;iBACK,OAAL;qBACSzJ,IAAL,GAAYA,IAAZ;qBACKiJ,QAAL,GAAgB3O,UAAUiQ,KAA1B;;;oBAGI,KAAKT,KAAL,CAAW/H,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;yBACnCjJ,MAAL,CAAY8vB,WAAZ,GAA0B,IAA1B;;oBAEA,KAAK9e,KAAL,CAAW/H,YAAX,CAAwB,UAAxB,CAAJ,EAAyC;yBAChCjJ,MAAL,CAAYgmB,QAAZ,GAAuB,IAAvB;;oBAEA,KAAKhV,KAAL,CAAW/H,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;yBACnCjJ,MAAL,CAAYoQ,WAAZ,GAA0B,IAA1B;;oBAEA,KAAKY,KAAL,CAAW/H,YAAX,CAAwB,OAAxB,CAAJ,EAAsC;yBAC7BjJ,MAAL,CAAY0W,KAAZ,GAAoB,IAApB;;oBAEA,KAAK1F,KAAL,CAAW/H,YAAX,CAAwB,MAAxB,CAAJ,EAAqC;yBAC5BjJ,MAAL,CAAY4gB,IAAZ,CAAiBhH,MAAjB,GAA0B,IAA1B;;;;;;qBAMCxH,KAAL,CAAWoC,KAAX,CAAiB,gCAAjB;;;;;aAKHrU,SAAL,GAAiBqL,QAAQqkB,KAAR,CAAc,KAAK3oB,IAAnB,EAAyB,KAAKiJ,QAA9B,EAAwC,KAAKnQ,MAAL,CAAYoQ,WAApD,CAAjB;;;YAGI,CAAC,KAAKjQ,SAAL,CAAekQ,GAApB,EAAyB;iBAChB+B,KAAL,CAAWoC,KAAX,CAAiB,0BAAjB;;;;;aAKCiM,SAAL,GAAiB,IAAI4B,SAAJ,CAAc,IAAd,CAAjB;;;aAGKpiB,OAAL,GAAe,IAAIJ,OAAJ,CAAY,IAAZ,CAAf;;;aAGKmR,KAAL,CAAWof,IAAX,GAAkB,IAAlB;;;YAGI,CAAC5vB,MAAMC,EAAN,CAAS+F,OAAT,CAAiB,KAAKN,QAAL,CAAcjB,SAA/B,CAAL,EAAgD;iBACvCiB,QAAL,CAAcjB,SAAd,GAA0BzE,MAAM+E,aAAN,CAAoB,KAApB,CAA1B;kBACMlG,IAAN,CAAW,KAAK2R,KAAhB,EAAuB,KAAK9K,QAAL,CAAcjB,SAArC;;;;aAICiB,QAAL,CAAcjB,SAAd,CAAwBQ,YAAxB,CAAqC,UAArC,EAAiD,CAAjD;;;WAGGsqB,YAAH,CAAgB/0B,IAAhB,CAAqB,IAArB;;;cAGM2lB,KAAN,CAAY3lB,IAAZ,CAAiB,IAAjB;;;YAGI,KAAKgF,MAAL,CAAYoS,KAAhB,EAAuB;kBACbtH,EAAN,CAAS,KAAK5E,QAAL,CAAcjB,SAAvB,EAAkC,KAAKjF,MAAL,CAAYsL,MAAZ,CAAmBgE,IAAnB,CAAwB,GAAxB,CAAlC,EAAgE,iBAAS;sBAChE8C,KAAL,CAAWC,GAAX,aAAyB7H,MAAMtD,IAA/B;aADJ;;;;;YAOA,KAAK+J,OAAL,IAAiB,KAAKsQ,OAAL,IAAgB,CAAC,KAAKphB,SAAL,CAAemQ,EAArD,EAA0D;eACnD4X,KAAH,CAASltB,IAAT,CAAc,IAAd;;;;aAICylB,SAAL,CAAexb,SAAf;;;aAGKwb,SAAL,CAAehrB,MAAf;;;aAGKqe,UAAL,GAAkB,IAAIuL,UAAJ,CAAe,IAAf,CAAlB;;;aAGKsE,GAAL,GAAW,IAAI2G,GAAJ,CAAQ,IAAR,CAAX;;;YAGI,KAAKtqB,MAAL,CAAYgmB,QAAhB,EAA0B;iBACjB9T,IAAL;;;;;;;;;;;;;;;;;;;;+BAiCD;gBACC,CAAC1R,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAK6F,KAAL,CAAWkB,IAA7B,CAAL,EAAyC;uBAC9B,IAAP;;;;mBAIG,KAAKlB,KAAL,CAAWkB,IAAX,EAAP;;;;;;;;;gCAMI;gBACA,CAAC,KAAKH,OAAN,IAAiB,CAACvR,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAK6F,KAAL,CAAWqC,KAA7B,CAAtB,EAA2D;;;;iBAItDrC,KAAL,CAAWqC,KAAX;;;;;;;;;;;;;;;mCAmCO3R,OAAO;;gBAERwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,CAAC,KAAKqQ,OAAvD;;gBAEI7H,MAAJ,EAAY;qBACHgI,IAAL;aADJ,MAEO;qBACEmB,KAAL;;;;;;;;;;+BAOD;gBACC,KAAKpC,OAAT,EAAkB;qBACToC,KAAL;qBACKC,OAAL;aAFJ,MAGO,IAAI9S,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAK6F,KAAL,CAAW0V,IAA7B,CAAJ,EAAwC;qBACtC1V,KAAL,CAAW0V,IAAX;;;;;;;;;;kCAOE;iBACD5U,WAAL,GAAmB,CAAnB;;;;;;;;;;+BAOGU,UAAU;iBACRV,WAAL,GAAmB,KAAKA,WAAL,IAAoBtR,MAAMC,EAAN,CAASgM,MAAT,CAAgB+F,QAAhB,IAA4BA,QAA5B,GAAuC,KAAKxS,MAAL,CAAYwS,QAAvE,CAAnB;;;;;;;;;;gCAOIA,UAAU;iBACTV,WAAL,GAAmB,KAAKA,WAAL,IAAoBtR,MAAMC,EAAN,CAASgM,MAAT,CAAgB+F,QAAhB,IAA4BA,QAA5B,GAAuC,KAAKxS,MAAL,CAAYwS,QAAvE,CAAnB;;;;;;;;;;;;;;;;uCA+HWja,MAAM;gBACX2b,SAAS,KAAKlD,KAAL,CAAW0F,KAAX,GAAmB,CAAnB,GAAuB,KAAKxC,MAA3C;iBACKA,MAAL,GAAcA,UAAU1T,MAAMC,EAAN,CAASgM,MAAT,CAAgBlU,IAAhB,IAAwBA,IAAxB,GAA+B,CAAzC,CAAd;;;;;;;;;;uCAOWA,MAAM;gBACX2b,SAAS,KAAKlD,KAAL,CAAW0F,KAAX,GAAmB,CAAnB,GAAuB,KAAKxC,MAA3C;iBACKA,MAAL,GAAcA,UAAU1T,MAAMC,EAAN,CAASgM,MAAT,CAAgBlU,IAAhB,IAAwBA,IAAxB,GAA+B,CAAzC,CAAd;;;;;;;;;;;;;;;;uCA6QWmJ,OAAO;;gBAEd,CAAC,KAAKvB,SAAL,CAAemQ,EAApB,EAAwB;;;;;gBAKlBsJ,SAASpZ,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,CAAC,KAAKwE,QAAL,CAAcjB,SAAd,CAAwBoE,SAAxB,CAAkCC,QAAlC,CAA2C,KAAKtJ,MAAL,CAAYsU,UAAZ,CAAuBT,QAAvB,CAAgC+F,MAA3E,CAAlD;;;kBAGM/N,WAAN,CAAkB,KAAK3F,QAAL,CAAckN,OAAd,CAAsBS,QAAxC,EAAkD+F,MAAlD;;;kBAGMrC,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuBT,QAAvB,CAAgC+F,MAA3E,EAAmFA,MAAnF;;;gBAGIA,WAAW,KAAK/F,QAAL,CAAc+F,MAA7B,EAAqC;qBAC5B/F,QAAL,CAAc+F,MAAd,GAAuBA,MAAvB;sBACMhO,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2C,KAAK6C,QAAL,CAAc+F,MAAd,GAAuB,iBAAvB,GAA2C,kBAAtF;;;;;;;;;;;;;;;;;kCA0EE;;gBAEFpO,QAAQmI,OAAZ,EAAqB;qBACZ3C,KAAL,CAAW0f,8BAAX;;;;;;;;;;;uCAQOxmB,QAAQ;;gBAEf,KAAK/J,SAAL,CAAemQ,EAAf,IAAqB,CAAC,KAAKc,OAA/B,EAAwC;;oBAE9Buf,WAAWnwB,MAAMmX,QAAN,CAAe,KAAKzR,QAAL,CAAcjB,SAA7B,EAAwC,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuB6N,YAA/D,CAAjB;;;oBAGMhZ,QAAQ,OAAOe,MAAP,KAAkB,WAAlB,GAAgC+F,SAAhC,GAA4C,CAAC/F,MAA3D;;;oBAGM0mB,SAASpwB,MAAM+W,WAAN,CAAkB,KAAKrR,QAAL,CAAcjB,SAAhC,EAA2C,KAAKjF,MAAL,CAAYsU,UAAZ,CAAuB6N,YAAlE,EAAgFhZ,KAAhF,CAAf;;;oBAGIynB,UAAU,KAAK5wB,MAAL,CAAY0S,QAAZ,CAAqBhJ,QAArB,CAA8B,UAA9B,CAAV,IAAuD,CAAClJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAY4T,QAA3B,CAA5D,EAAkG;6BACrF4O,UAAT,CAAoBxnB,IAApB,CAAyB,IAAzB,EAA+B,KAA/B;;;oBAGA41B,WAAWD,QAAf,EAAyB;wBACfE,YAAYD,SAAS,gBAAT,GAA4B,eAA9C;0BACMhlB,aAAN,CAAoB5Q,IAApB,CAAyB,IAAzB,EAA+B,KAAKgW,KAApC,EAA2C6f,SAA3C;;uBAEG,CAACD,MAAR;;mBAEG,KAAP;;;;;;;;;;;2BAQDpmB,OAAOQ,UAAU;kBACVF,EAAN,CAAS,KAAK5E,QAAL,CAAcjB,SAAvB,EAAkCuF,KAAlC,EAAyCQ,QAAzC;;;;;;;;;;;4BAQAR,OAAOQ,UAAU;kBACXD,GAAN,CAAU,KAAK7E,QAAL,CAAcjB,SAAxB,EAAmCuF,KAAnC,EAA0CQ,QAA1C;;;;;;;;;;;;;gCAUIA,UAAwB;;;gBAAd8lB,IAAc,uEAAP,KAAO;;gBACxB,CAAC,KAAK7P,KAAV,EAAiB;;;;gBAIX4D,OAAO,SAAPA,IAAO,GAAM;;yBAENzf,IAAT,CAAchC,KAAd,CAAoB+b,QAApB,GAA+B,EAA/B;;;uBAGK3B,KAAL,GAAa,IAAb;;;oBAGIsT,IAAJ,EAAU;wBACFlvB,OAAOoB,IAAP,CAAY,OAAKkD,QAAjB,EAA2BnF,MAA/B,EAAuC;;8BAE7ByG,aAAN,CAAoB,OAAKtB,QAAL,CAAckN,OAAd,CAAsBlB,IAA1C;8BACM1K,aAAN,CAAoB,OAAKtB,QAAL,CAAc2N,QAAlC;8BACMrM,aAAN,CAAoB,OAAKtB,QAAL,CAAcwM,QAAlC;8BACMlL,aAAN,CAAoB,OAAKtB,QAAL,CAAcC,OAAlC;;;+BAGKD,QAAL,CAAckN,OAAd,CAAsBlB,IAAtB,GAA6B,IAA7B;+BACKhM,QAAL,CAAc2N,QAAd,GAAyB,IAAzB;+BACK3N,QAAL,CAAcwM,QAAd,GAAyB,IAAzB;+BACKxM,QAAL,CAAcC,OAAd,GAAwB,IAAxB;;;;wBAIA3F,MAAMC,EAAN,CAAS0K,QAAT,CAAkBH,QAAlB,CAAJ,EAAiC;;;iBAhBrC,MAmBO;;2BAEEyV,SAAL,CAAesQ,KAAf;;;0BAGM3K,cAAN,CAAqB,OAAKlgB,QAAL,CAAcmqB,QAAnC,EAA6C,OAAKnqB,QAAL,CAAcjB,SAA3D;;;0BAGM2G,aAAN,CAAoB5Q,IAApB,CAAyB,MAAzB,EAA+B,OAAKkL,QAAL,CAAcmqB,QAA7C,EAAuD,WAAvD,EAAoE,IAApE;;;wBAGI7vB,MAAMC,EAAN,CAAS0K,QAAT,CAAkBH,QAAlB,CAAJ,EAAiC;iCACpBhQ,IAAT,CAAc,OAAKkL,QAAL,CAAcmqB,QAA5B;;;;2BAICpP,KAAL,GAAa,KAAb;;;+BAGW,YAAM;+BACR/a,QAAL,GAAgB,IAAhB;+BACK8K,KAAL,GAAa,IAAb;qBAFJ,EAGG,GAHH;;aA9CR;;;iBAsDK0V,IAAL;;;oBAGW,KAAKvW,QAAhB,SAA4B,KAAKjJ,IAAjC;qBACS,aAAL;qBACK,aAAL;;iCAEiB,KAAK+a,MAAL,CAAYD,OAAzB;;;uBAGGtN,oBAAH,CAAwB1Z,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;;;;;;qBAOC,eAAL;;kCAEkB,KAAKinB,MAAL,CAAY8H,SAA1B;kCACc,KAAK9H,MAAL,CAAYlQ,OAA1B;;;wBAGI,KAAKyL,KAAL,KAAe,IAAf,IAAuBhd,MAAMC,EAAN,CAAS0K,QAAT,CAAkB,KAAKqS,KAAL,CAAW4R,OAA7B,CAA3B,EAAkE;6BACzD5R,KAAL,CAAW4R,OAAX;;;;;;;;qBAQH,aAAL;;;wBAGQ,KAAK5R,KAAL,KAAe,IAAnB,EAAyB;6BAChBA,KAAL,CAAWwT,MAAX,GAAoBnrB,IAApB,CAAyBgf,IAAzB;;;;+BAIOA,IAAX,EAAiB,GAAjB;;;;;;;;;;;;;;;;iCAaH3d,MAAM;mBACJsE,QAAQqG,IAAR,CAAa7W,IAAb,CAAkB,IAAlB,EAAwBkM,IAAxB,CAAP;;;;;;;;;;;;4BAvxBU;mBACHlF,QAAQ,KAAKmO,QAAL,KAAkB3O,UAAUiQ,KAApC,CAAP;;;;4BAEU;mBACHzP,QAAQ,KAAKqa,SAAL,IAAkB,KAAKrC,OAA/B,CAAP;;;;4BAEY;mBACLhY,QAAQ,KAAKmO,QAAL,KAAkB3O,UAAU8M,OAApC,CAAP;;;;4BAEU;mBACHtM,QAAQ,KAAKmO,QAAL,KAAkB3O,UAAU+M,KAApC,CAAP;;;;4BAEU;mBACHvM,QAAQ,KAAKkF,IAAL,KAAczF,MAAMkP,KAA5B,CAAP;;;;4BAEU;mBACH3O,QAAQ,KAAKkF,IAAL,KAAczF,MAAMoP,KAA5B,CAAP;;;;4BA6BU;mBACH7O,QAAQ,KAAKif,KAAL,IAAc,CAAC,KAAK7I,MAApB,IAA8B,CAAC,KAAK2L,KAA5C,CAAP;;;;;;;;;4BAMS;mBACF/hB,QAAQ,KAAKgP,KAAL,CAAWoH,MAAnB,CAAP;;;;;;;;;4BAMU;mBACHpW,QAAQ,KAAKoW,MAAL,IAAe,KAAKtG,WAAL,KAAqB,CAA5C,CAAP;;;;;;;;;4BAMQ;mBACD9P,QAAQ,KAAKgP,KAAL,CAAW+S,KAAnB,CAAP;;;;0BAyDYriB,OAAO;;gBAEf,CAAC,KAAK0S,QAAV,EAAoB;;;;;gBAKd6c,eAAezwB,MAAMC,EAAN,CAASgM,MAAT,CAAgB/K,KAAhB,KAA0BA,QAAQ,CAAvD;;;iBAGKsP,KAAL,CAAWc,WAAX,GAAyBmf,eAAejrB,KAAK5P,GAAL,CAASsL,KAAT,EAAgB,KAAK0S,QAArB,CAAf,GAAgD,CAAzE;;;iBAGKhC,KAAL,CAAWC,GAAX,iBAA6B,KAAKP,WAAlC;;;;;;;4BAMc;mBACPjQ,OAAO,KAAKmP,KAAL,CAAWc,WAAlB,CAAP;;;;;;;;;4BAMW;gBACHiF,QADG,GACU,KAAK/F,KADf,CACH+F,QADG;;;;gBAIPvW,MAAMC,EAAN,CAASgM,MAAT,CAAgBsK,QAAhB,CAAJ,EAA+B;uBACpBA,QAAP;;;;;;gBAMAA,YAAYA,SAAShW,MAArB,IAA+B,KAAKqT,QAAL,GAAgB,CAAnD,EAAsD;uBAC3C2C,SAASma,GAAT,CAAa,CAAb,IAAkB,KAAK9c,QAA9B;;;mBAGG,CAAP;;;;;;;;;4BAMU;mBACHpS,QAAQ,KAAKgP,KAAL,CAAWgH,OAAnB,CAAP;;;;;;;;;4BAMW;;gBAELmZ,eAAevZ,WAAW,KAAK5X,MAAL,CAAYoU,QAAvB,CAArB;;;gBAGMA,WAAW,CAAC,KAAKpD,KAAL,IAAc,EAAf,EAAmBoD,QAAnB,IAA+B,CAAhD;;;mBAGO+c,gBAAgB/c,QAAvB;;;;;;;;;;0BAOOpM,OAAO;gBACVkM,SAASlM,KAAb;gBACMmE,MAAM,CAAZ;gBACM/V,MAAM,CAAZ;;gBAEIoK,MAAMC,EAAN,CAASK,MAAT,CAAgBoT,MAAhB,CAAJ,EAA6B;yBAChBrS,OAAOqS,MAAP,CAAT;;;;gBAIA,CAAC1T,MAAMC,EAAN,CAASgM,MAAT,CAAgByH,MAAhB,CAAL,EAA8B;yBACjB,KAAKjU,OAAL,CAAagB,GAAb,CAAiB,QAAjB,CAAT;;;;gBAIA,CAACT,MAAMC,EAAN,CAASgM,MAAT,CAAgByH,MAAhB,CAAL,EAA8B;sBAAA,GACZ,KAAKlU,MADO,CACvBkU,MADuB;;;;gBAK1BA,SAAS/H,GAAb,EAAkB;yBACLA,GAAT;;;gBAGA+H,SAAS9d,GAAb,EAAkB;yBACLA,GAAT;;;;iBAIC4J,MAAL,CAAYkU,MAAZ,GAAqBA,MAArB;;;iBAGKlD,KAAL,CAAWkD,MAAX,GAAoBA,MAApB;;;gBAGI,CAAC1T,MAAMC,EAAN,CAASC,KAAT,CAAesH,KAAf,CAAD,IAA0B,KAAK0O,KAA/B,IAAwCxC,SAAS,CAArD,EAAwD;qBAC/CwC,KAAL,GAAa,KAAb;;;;;;;;4BAOK;mBACF7U,OAAO,KAAKmP,KAAL,CAAWkD,MAAlB,CAAP;;;;0BAyBMT,MAAM;gBACRvJ,SAASuJ,IAAb;;;gBAGI,CAACjT,MAAMC,EAAN,CAASuI,OAAT,CAAiBkB,MAAjB,CAAL,EAA+B;yBAClB,KAAKjK,OAAL,CAAagB,GAAb,CAAiB,OAAjB,CAAT;;;;gBAIA,CAACT,MAAMC,EAAN,CAASuI,OAAT,CAAiBkB,MAAjB,CAAL,EAA+B;yBAClB,KAAKlK,MAAL,CAAY0W,KAArB;;;;iBAIC1W,MAAL,CAAY0W,KAAZ,GAAoBxM,MAApB;;;iBAGK8G,KAAL,CAAW0F,KAAX,GAAmBxM,MAAnB;;;;;;;4BAMQ;mBACDlI,QAAQ,KAAKgP,KAAL,CAAW0F,KAAnB,CAAP;;;;;;;;;4BAMW;;gBAEP,CAAC,KAAKzF,OAAV,EAAmB;uBACR,IAAP;;;gBAGA,KAAKG,OAAT,EAAkB;uBACP,IAAP;;;;mBAKApP,QAAQ,KAAKgP,KAAL,CAAWogB,WAAnB,KACApvB,QAAQ,KAAKgP,KAAL,CAAWqgB,2BAAnB,CADA,IAEArvB,QAAQ,KAAKgP,KAAL,CAAWsgB,WAAX,IAA0B,KAAKtgB,KAAL,CAAWsgB,WAAX,CAAuBvwB,MAAzD,CAHJ;;;;;;;;;;0BAWMW,OAAO;gBACTqY,QAAQ,IAAZ;;gBAEIvZ,MAAMC,EAAN,CAASgM,MAAT,CAAgB/K,KAAhB,CAAJ,EAA4B;wBAChBA,KAAR;;;gBAGA,CAAClB,MAAMC,EAAN,CAASgM,MAAT,CAAgBsN,KAAhB,CAAL,EAA6B;wBACjB,KAAK9Z,OAAL,CAAagB,GAAb,CAAiB,OAAjB,CAAR;;;gBAGA,CAACT,MAAMC,EAAN,CAASgM,MAAT,CAAgBsN,KAAhB,CAAL,EAA6B;wBACjB,KAAK/Z,MAAL,CAAY+Z,KAAZ,CAAkB+M,QAA1B;;;;gBAIA/M,QAAQ,GAAZ,EAAiB;wBACL,GAAR;;gBAEAA,QAAQ,GAAZ,EAAiB;wBACL,GAAR;;;gBAGA,CAAC,KAAK/Z,MAAL,CAAY+Z,KAAZ,CAAkBxO,OAAlB,CAA0B7B,QAA1B,CAAmCqQ,KAAnC,CAAL,EAAgD;qBACvC3H,KAAL,CAAWqC,IAAX,yBAAsCsF,KAAtC;;;;;iBAKC/Z,MAAL,CAAY+Z,KAAZ,CAAkB+M,QAAlB,GAA6B/M,KAA7B;;;iBAGK/I,KAAL,CAAWsY,YAAX,GAA0BvP,KAA1B;;;;;;;4BAMQ;mBACDlY,OAAO,KAAKmP,KAAL,CAAWsY,YAAlB,CAAP;;;;;;;;;;;0BAQQ5nB,OAAO;gBACX+W,UAAU,IAAd;;gBAEI,CAACjY,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAL,EAA4B;0BACdG,OAAOH,KAAP,CAAV;;;gBAGA,CAAClB,MAAMC,EAAN,CAASgM,MAAT,CAAgBgM,OAAhB,CAAL,EAA+B;0BACjB,KAAKxY,OAAL,CAAagB,GAAb,CAAiB,SAAjB,CAAV;;;gBAGA,CAACT,MAAMC,EAAN,CAASgM,MAAT,CAAgBgM,OAAhB,CAAL,EAA+B;0BACjB,KAAKzY,MAAL,CAAYyY,OAAZ,CAAoBqO,QAA9B;;;gBAGA,CAACtmB,MAAMC,EAAN,CAASgM,MAAT,CAAgBgM,OAAhB,CAAL,EAA+B;0BACjB,KAAKzY,MAAL,CAAYyY,OAAZ,CAAoBe,OAA9B;;;gBAGA,CAAC,KAAKjO,OAAL,CAAakN,OAAb,CAAqB1X,MAA1B,EAAkC;;;;gBAI9B,CAAC,KAAKwK,OAAL,CAAakN,OAAb,CAAqB/O,QAArB,CAA8B+O,OAA9B,CAAL,EAA6C;oBACnC8Y,UAAU/wB,MAAM+wB,OAAN,CAAc,KAAKhmB,OAAL,CAAakN,OAA3B,EAAoCA,OAApC,CAAhB;qBACKrG,KAAL,CAAWqC,IAAX,kCAA+CgE,OAA/C,gBAAiE8Y,OAAjE;0BACUA,OAAV;;;;iBAICvxB,MAAL,CAAYyY,OAAZ,CAAoBqO,QAApB,GAA+BrO,OAA/B;;;iBAGKzH,KAAL,CAAWyH,OAAX,GAAqBA,OAArB;;;;;;;4BAMU;mBACH,KAAKzH,KAAL,CAAWyH,OAAlB;;;;;;;;;;;0BAQK/W,OAAO;gBACNwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAK1B,MAAL,CAAY4gB,IAAZ,CAAiBhH,MAAlE;iBACK5Z,MAAL,CAAY4gB,IAAZ,CAAiBhH,MAAjB,GAA0B1P,MAA1B;iBACK8G,KAAL,CAAW4P,IAAX,GAAkB1W,MAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAiDO;mBACAlI,QAAQ,KAAKgP,KAAL,CAAW4P,IAAnB,CAAP;;;;;;;;;;0BAOOlf,OAAO;mBACP8vB,MAAP,CAAcx2B,IAAd,CAAmB,IAAnB,EAAyB0G,KAAzB;;;;;;;4BAMS;mBACF,KAAKsP,KAAL,CAAWiW,UAAlB;;;;;;;;;;0BAOOvlB,OAAO;gBACV,CAAC,KAAKyP,OAAV,EAAmB;qBACViB,KAAL,CAAWqC,IAAX,CAAgB,kCAAhB;;;;eAID4M,SAAH,CAAarmB,IAAb,CAAkB,IAAlB,EAAwB0G,KAAxB;;;;;;;4BAMS;gBACL,CAAC,KAAKyP,OAAV,EAAmB;uBACR,IAAP;;;mBAGG,KAAKH,KAAL,CAAWjF,YAAX,CAAwB,QAAxB,CAAP;;;;;;;;;;0BAOSrK,OAAO;gBACVwI,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAK1B,MAAL,CAAYgmB,QAA7D;iBACKhmB,MAAL,CAAYgmB,QAAZ,GAAuB9b,MAAvB;;;;;;;4BAMW;mBACJlI,QAAQ,KAAKhC,MAAL,CAAYgmB,QAApB,CAAP;;;;0BAiCatkB,OAAO;qBACXsb,GAAT,CAAahiB,IAAb,CAAkB,IAAlB,EAAwB0G,KAAxB;;;;;;;4BAMe;4BACkB,KAAKmS,QADvB;gBACP+F,MADO,aACPA,MADO;gBACCL,YADD,aACCA,YADD;;mBAERK,SAASL,YAAT,GAAwB,CAAC,CAAhC;;;;;;;;;;;0BAQS7X,OAAO;qBACPob,WAAT,CAAqB9hB,IAArB,CAA0B,IAA1B,EAAgC0G,KAAhC;;;;;;;4BAMW;mBACJ,CAACmS,SAAS0J,eAAT,CAAyBviB,IAAzB,CAA8B,IAA9B,KAAuC,EAAxC,EAA4C6e,QAAnD;;;;;;;;;;;0BAQInY,OAAO;gBACL+vB,SAAS;qBACN,oBADM;wBAEH;aAFZ;;;gBAMI,CAACjmB,QAAQkI,GAAb,EAAkB;;;;;gBAKZxJ,SAAS1J,MAAMC,EAAN,CAASuI,OAAT,CAAiBtH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAKgS,GAAL,KAAa+d,OAAOC,MAArE;;;iBAGK1gB,KAAL,CAAWF,yBAAX,CAAqC5G,SAASunB,OAAO/d,GAAhB,GAAsB+d,OAAOC,MAAlE;;;;;;;4BAMM;gBACF,CAAClmB,QAAQkI,GAAb,EAAkB;uBACP,IAAP;;;mBAGG,KAAK1C,KAAL,CAAW2gB,sBAAlB;;;;kCA+LazqB,MAAMiJ,UAAUuhB,QAAQ;mBAC9BlmB,QAAQqkB,KAAR,CAAc3oB,IAAd,EAAoBiJ,QAApB,EAA8BuhB,MAA9B,CAAP;;;;;;;;;;;mCAQcpuB,KAAK3H,IAAI;mBAChB6E,MAAMwb,UAAN,CAAiB1Y,GAAjB,EAAsB3H,EAAtB,CAAP;;;;;;;;;;;8BAQS0M,UAAwB;gBAAdkD,OAAc,uEAAJ,EAAI;;gBAC7BnF,UAAU,IAAd;;gBAEI5F,MAAMC,EAAN,CAASK,MAAT,CAAgBuH,QAAhB,CAAJ,EAA+B;0BACjBlG,MAAMkE,IAAN,CAAWtR,SAAS0U,gBAAT,CAA0BpB,QAA1B,CAAX,CAAV;aADJ,MAEO,IAAI7H,MAAMC,EAAN,CAASsC,QAAT,CAAkBsF,QAAlB,CAAJ,EAAiC;0BAC1BlG,MAAMkE,IAAN,CAAWgC,QAAX,CAAV;aADG,MAEA,IAAI7H,MAAMC,EAAN,CAASqC,KAAT,CAAeuF,QAAf,CAAJ,EAA8B;0BACvBA,SAASyF,MAAT,CAAgBtN,MAAMC,EAAN,CAAS+F,OAAzB,CAAV;;;gBAGAhG,MAAMC,EAAN,CAASC,KAAT,CAAe0F,OAAf,CAAJ,EAA6B;uBAClB,IAAP;;;mBAGGA,QAAQgJ,GAAR,CAAY;uBAAK,IAAI6gB,IAAJ,CAAS2B,CAAT,EAAYrmB,OAAZ,CAAL;aAAZ,CAAP;;;;;;AAIR0kB,KAAKzR,QAAL,GAAgBhe,MAAMqxB,SAAN,CAAgBrT,UAAhB,CAAhB;;AC1nCA","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(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', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\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 } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\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) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\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) { items.push([name, value]); });\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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 // 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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\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 },\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 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\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 _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\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","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.11/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.11\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.11\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\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/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","prefix","hasId","isCached","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","querySelectorAll","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","createMenuItem","getLabel","updateSetting","pane","currentTrack","default","tracks","getTracks","track","active","language","unshift","speed","isVimeo","values","some","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","userLanguage","setLanguage","trackEvents","set","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","toggleCaptions","getCurrentTrack","embed","enableTextTrack","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","changed","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","eventType","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","stripHTML","getPaused","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(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', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\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 } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\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) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\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) { items.push([name, value]); });\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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 // 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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\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 },\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 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\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 _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\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","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.12/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.12\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.12\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\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/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index a2f9dd52..986d53c2 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/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";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=d(t,!0),o(n),f)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),T=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},S=function(e,t,n){if(T(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,d=e&A.P,h=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=h&&a?S(s,n):d&&"function"==typeof s?S(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),d&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),M=E("view"),x=!(!n.ArrayBuffer||!n.DataView),L=x,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,M,!0)):L=!1;var j={ABV:x,CONSTR:L,TYPED:P,VIEW:M},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},U=Math.min,V=function(e){return e>0?U(B(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=B(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(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}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),ae=oe.concat("length","prototype"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),fe=p.f,de=ue("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,de)&&fe(e,de,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,d=n.RangeError,h=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?"_b":"buffer",T=s?"_l":"byteLength",S=s?"_o":"byteOffset";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,d=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*d,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-h:h;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function M(e){return[255&e,e>>8&255]}function x(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[T])throw d(l);var o=e[k]._b,a=r+e[S],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[T])throw d(l);for(var s=e[k]._b,c=a+e[S],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var U,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(U=W[z++])in c||m(c,U,g[U]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=D(e);this._b=ce.call(new Array(t),0),this[T]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[T],r=B(t);if(r<0||r>i)throw d("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw d("Wrong length!");this[k]=e,this[S]=r,this[T]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,M,t,arguments[2])},setUint16:function(e,t){q(this,2,e,M,t,arguments[2])},setInt32:function(e,t){q(this,4,e,x,t,arguments[2])},setUint32:function(e,t){q(this,4,e,x,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[ge])?t:T(n)},ye=ue("species"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Te=we.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Te&&void 0===t)return Te.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(me(this,we))(V(r-i)),s=new Ee(this),l=new Ee(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},Me=ue("iterator"),xe=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||xe[Me]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},Ue=te("IE_PROTO"),Ve=Object.prototype,De=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ue)?e[Ue]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ye;return function(t,c,u){for(var f,d,h=le(t),p=z(h),g=S(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(d=g(f=p[y],y,h),e))if(n)v[y]=d;else if(d)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;null==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?d?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=De(w.call(new e)))!==Object.prototype&&c.next&&(he(c,f,!0),v(c,tt)||m(c,tt,it)),d&&g&&"values"!==g.name&&(h=!0,y=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[f]=it,r)if(s={values:d?y:u("values"),keys:o?y:u("keys"),entries:b},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(nt||h),t,s);return s},ot=rt(Array,"Array",function(e,t){this._t=Y(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,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,$e("keys"),$e("values"),$e("entries");var at=ue("iterator"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ft=Object.getOwnPropertyDescriptor,dt={f:s?ft:function(e,t){if(e=Y(e),t=d(t,!0),f)try{return ft(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=pe,u=S,f=F,h=g,y=m,b=I,w=B,k=V,T=D,A=J,_=d,P=v,M=Ce,x=r,L=le,O=Le,N=Be,R=De,q=se.f,U=We,H=E,W=ue,z=Ke,G=$,Y=me,K=ot,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=dt,re=ne.f,oe=ie.f,ae=t.RangeError,fe=t.TypeError,de=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Te=z(5),Se=z(6),Ae=G(!0),_e=G(!1),Me=K.values,xe=K.keys,Oe=K.entries,Ne=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,qe=he.slice,Ue=he.toString,Ve=he.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new de(new Uint16Array([1]).buffer)[0]}),et=!!de&&!!de.prototype.set&&i(function(){new de(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae("Wrong offset!");return n},nt=function(e){if(x(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(x(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return at(Y(e,e[Ye]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,d=U(s);if(null!=d&&!O(d)){for(a=d.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ft=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!de&&i(function(){Ve.call(new de(1))}),pt=function(){return Ve.apply(ht?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw ae("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return xe.call(nt(this))},values:function(){return Me.call(nt(this))}},bt=function(e,t){return x(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&x(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ue.call({})})&&(Ue=Ve=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ue,toLocaleString:pt}),st(kt,"buffer","b"),st(kt,"byteOffset","o"),st(kt,"byteLength","l"),st(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,d=t[s],h=d||{},p=d&&R(d),g=!d||!l.ABV,m={},v=d&&d.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(d=r(function(e,t,i,r){f(e,d,s,"_d");var o,a,l,c,u=0,h=0;if(x(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=M(t))||"SharedArrayBuffer"==c))return Je in t?at(d,t):ut.call(d,t);o=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae("Wrong length!");if((a=p-h)<0)throw ae("Wrong length!")}else if((a=k(r)*n)+h>p)throw ae("Wrong length!");l=a/n}else l=T(t),o=new ge(a=l*n);for(y(e,"_d",{b:o,o:h,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=d.prototype=N(kt),y(v,"constructor",d)):i(function(){d(1)})&&i(function(){new d(-1)})&&X(function(e){new d,new d(null),new d(1.5),new d(e)},!0)||(d=r(function(e,t,i,r){var o;return f(e,d,s),x(t)?t instanceof ge||"ArrayBuffer"==(o=M(t))||"SharedArrayBuffer"==o?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?at(d,t):ut.call(d,t):new h(T(t))}),be(p!==Function.prototype?q(h).concat(q(p)):q(h),function(e){e in d||y(d,e,h[e])}),d.prototype=v,v.constructor=d);var w=v[He],E=!!w&&("values"==w.name||null==w.name),S=vt.values;y(d,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ye,d),(a?new d(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=d,o(o.G+o.W+o.F*(d!=h),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){h.of.call(d,1)}),s,{from:ut,of:ft}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Ue&&(v.toString=Ue),o(o.P+o.F*i(function(){new d(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:S,E||y(v,He,S)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,d=s?function(){return e}:We(e),h=S(r,a,i?2:1),p=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Le(d)){for(l=V(e.length);l>p;p++)if((f=i?h(o(c=e[p])[0],c[1]):h(e[p]))===t||f===n)return f}else for(u=d.call(e);!(c=u.next()).done;)if((f=pt(u,h,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=mt.fastKey,wt=s?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&&gt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=S(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),s&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},Tt=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},St={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=S(Function.call,dt.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return Tt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:Tt},At=St.set,_t=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",d=u&&u.prototype,h={},p=function(e){var t=d[e];k(d,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||d.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return null!=n&&gt(n,s,i[f],i),i})).prototype=d,d.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||m)&&p(f),l&&d.clear&&delete d.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||o.setStrong(u,e,s),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,Mt=!Pt||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Pt,xt=mt.getWeak,Lt=Ke(5),Ot=Ke(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&&gt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=xt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},f=e.exports=_t("WeakMap",c,u,Rt,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),Mt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;C(C.S+C.F*!a(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=T(e),r=o(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Ut=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Dt={},Ht=Function.bind||function(e){var t=T(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Dt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Dt[t]=Function("F,a","return new F("+i.join(",")+")")}return Dt[t](e,n)}(t,r.length,r):Ut(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),"Reflect",{construct:function(e,t){T(e),o(t);var n=arguments.length<3?e:T(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Be(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=d(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=dt.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=dt.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=De(t))?e(a,n,s):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return dt.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return De(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=dt.f(o(t),n);if(!c){if(r(s=De(t)))return e(s,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((a=dt.f(l,n)||g(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Ut("function"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(S(cn,e,1))}:an&&an.now?Xt=function(e){an.now(S(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=S(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(S(cn,e,1),0)});var fn={set:nn,clear:rn},dn=fn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=T(t),this.reject=T(n)}var vn,bn,wn,En,kn={f:function(e){return new yn(e)}},Tn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=fn.set,An=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){dn.call(n,r)};else{var a=!0,s=document.createTextNode("");new hn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),_n=n.TypeError,Cn=n.process,Pn=n.Promise,Mn="process"==Ce(Cn),xn=function(){},Ln=bn=kn.f,On=!!function(){try{var e=Pn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Mn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;An(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(_n("Promise-chain cycle")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Sn.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Tn(function(){Mn?Cn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Mn||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){Sn.call(n,function(){var t;Mn?Cn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=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()),jn(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _n("Promise can't be resolved itself");(t=Nn(e))?An(function(){var i={_w:n,_d:!1};try{t.call(e,S(Bn,i,1),S(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Pn=function(e){F(this,Pn,"Promise","_h"),T(e),vn.call(this);try{e(S(Bn,this,1),S(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Pn.prototype,{then:function(e,t){var n=Ln(me(this,Pn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Mn?Cn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=S(Bn,e,1),this.reject=S(qn,e,1)},kn.f=Ln=function(e){return e===Pn||e===En?new wn(e):bn(e)}),C(C.G+C.W+C.F*!On,{Promise:Pn}),he(Pn,"Promise"),ve("Promise"),En=i.Promise,C(C.S+C.F*!On,"Promise",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!On,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=kn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(On&&lt(function(e){Pn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=Tn(function(){var n=[],o=0,a=1;gt(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=Ln(t),i=n.reject,r=Tn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Un={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Un.f(e)})},Hn=se.f,Wn={}.toString,zn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&"[object Window]"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(Y(e))}},Yn=mt.KEY,Kn=dt.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue("_hidden"),ti=ue("toPrimitive"),ni={}.propertyIsEnumerable,ii=Z("symbol-registry"),ri=Z("symbols"),oi=Z("op-symbols"),ai=Object.prototype,si="function"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Be(Qn({},"a",{get:function(){return Qn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Kn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,fi=function(e){var t=ri[e]=Be($n.prototype);return t._k=e,t},di=si&&"symbol"==typeof $n.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof $n},hi=function(e,t,n){return e===ai&&hi(oi,t,n),o(e),t=d(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Be(n,{enumerable:g(0,!1)})):(v(e,ei)||Qn(e,ei,g(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)hi(e,n=i[r++],t[n]);return e},gi=function(e){var t=ni.call(this,e=d(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},mi=function(e,t){if(e=Y(e),t=d(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Kn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(Y(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:Y(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(k(($n=function(){if(this instanceof $n)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,g(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),fi(e)}).prototype,"toString",function(){return this._k}),dt.f=mi,p.f=hi,se.f=Gn.f=yi,ut.f=gi,Ct.f=vi,s&&k(ai,"propertyIsEnumerable",gi,!0),Un.f=function(e){return fi(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:$n});for(var bi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),wi=0;bi.length>wi;)ue(bi[wi++]);for(var Ei=Oe(ue.store),ki=0;Ei.length>ki;)Dn(Ei[ki++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return v(ii,e+="")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?Be(e):pi(Be(e),t)},defineProperty:hi,defineProperties:pi,getOwnPropertyDescriptor:mi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||a(function(){var e=$n();return"[null]"!=Zn([e])||"{}"!=Zn({a:e})||"{}"!=Zn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||m($n.prototype,ti,$n.prototype.valueOf),he($n,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var Ti=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),"Object",r)},Si=mt.onFreeze;Ti("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ai=mt.onFreeze;Ti("seal",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}});var _i=mt.onFreeze;Ti("preventExtensions",function(e){return function(t){return e&&r(t)?e(_i(t)):t}}),Ti("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Ci=dt.f;Ti("getOwnPropertyDescriptor",function(){return function(e,t){return Ci(Y(e),t)}}),Ti("getPrototypeOf",function(){return function(e){return De(le(e))}}),Ti("keys",function(){return function(e){return Oe(le(e))}}),Ti("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:Mt});var Pi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Pi});var Mi=p.f,xi=Function.prototype,Li=/^\s*function ([^ (]*)/;"name"in xi||s&&Mi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Li)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=B(t),a=r.length;return o<0||o>=a?ji?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Fi});var Ri=ue("match"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(qi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Ui=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ui]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi("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]}),Wi("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]}),Wi("split",2,function(e,t,n){var i=qi,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,f,d=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(a||(s=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(d.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(d,l.slice(1)),u=l[0].length,p=c,d.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||d.push(""):d.push(n.slice(p)),d.length>g?d.slice(0,g):d}}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]}),Wi("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 zi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=We(o);if(c&&(l=S(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Le(f))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),$e("copyWithin");var Gi=Ke(5),Yi=!0;"find"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Ki=Ke(6),Qi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Qi=!1}),C(C.P+C.F*Qi,"Array",{findIndex:function(e){return Ki(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),C(C.P,"Array",{fill:ce}),$e("fill");var Ji=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};C(C.S,"Number",{isInteger:Xi});var Zi=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;C(C.S+C.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;C(C.S+C.F*!(ir&&1/ir(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;C(C.S+C.F*!(rr&&1/rr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;C(C.S,"Math",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(lr!=Math.expm1),"Math",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),fr=cr(2,-23),dr=cr(2,127)*(2-fr),hr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<hr?r*(i/hr/fr+1/ur-1/ur)*hr*fr:(n=(t=(1+fr/ur)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:pr});var gr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=gr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var mr=Math.imul;C(C.S+C.F*a(function(){return-5!=mr(4294967295,5)||2!=mr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:er}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:or});var yr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);C(C.P,"Array",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var wr=ut.f,Er=function(e){return function(t){for(var n,i=Y(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},kr=Er(!1);C(C.S,"Object",{values:function(e){return kr(e)}});var Tr=Er(!0);C(C.S,"Object",{entries:function(e){return Tr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=dt.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Sr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Ar=n.navigator,_r=Ar&&Ar.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Cr=[].slice,Pr=/MSIE .\./.test(_r),Mr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Cr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Pr,{setTimeout:Mr(n.setTimeout),setInterval:Mr(n.setInterval)}),C(C.G+C.B,{setImmediate:fn.set,clearImmediate:fn.clear});for(var xr=ue("iterator"),Lr=ue("toStringTag"),Or=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Br=n[Rr],Ur=Br&&Br.prototype;if(Ur&&(Ur[xr]||m(Ur,xr,Or),Ur[Lr]||m(Ur,Lr,Rr),Pe[Rr]=Or,qr))for(Fr in ot)Ur[Fr]||k(Ur,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",d="executing",h="completed",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(x([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=T.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=T,T.constructor=k,T[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,T):(e.__proto__=T,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},S(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=x,M.prototype={constructor:M,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:x(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new M(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===d)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=d;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function T(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function M(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function x(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=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};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}!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",{value:{}}),"string"==typeof e){if(""!==e)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]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},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.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(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(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].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.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},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},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),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 Hr,Wr=t(function(e,t){var n;n=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,f=i.before||e,d=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=d):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=d:((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!==f(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},e.exports=n()}),zr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Gr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Yr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Kr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var 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&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Qr=function(){function e(t){zr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Gr(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(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}(),Jr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},$r={audio:"audio",video:"video"},Xr={is:{object:function(e){return Xr.getConstructor(e)===Object},number:function(e){return Xr.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return Xr.getConstructor(e)===String},boolean:function(e){return Xr.getConstructor(e)===Boolean},function:function(e){return Xr.getConstructor(e)===Function},array:function(e){return!Xr.is.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return Xr.is.instanceof(e,WeakMap)},nodeList:function(e){return Xr.is.instanceof(e,NodeList)},element:function(e){return Xr.is.instanceof(e,Element)},textNode:function(e){return Xr.getConstructor(e)===Text},event:function(e){return Xr.is.instanceof(e,Event)},cue:function(e){return Xr.is.instanceof(e,window.TextTrackCue)||Xr.is.instanceof(e,window.VTTCue)},track:function(e){return Xr.is.instanceof(e,TextTrack)||!Xr.is.nullOrUndefined(e)&&Xr.is.string(e.kind)},url:function(e){return!Xr.is.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return Xr.is.nullOrUndefined(e)||(Xr.is.string(e)||Xr.is.array(e)||Xr.is.nodeList(e))&&!e.length||Xr.is.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)}},getConstructor:function(e){return Xr.is.nullOrUndefined(e)?null:e.constructor},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(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})})},loadScript:function(e){return new Promise(function(t,n){Wr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.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=Qr.supported,a=document.createElement("div");if(Xr.toggleHidden(a,!0),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var l=JSON.parse(s);r(a,l.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||(o&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):Xr.is.element(e)&&Xr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Kr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n},toggleHidden:function(e,t){if(Xr.is.element(e)){var n=t;Xr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,"keydown",o,!1):Xr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(" "),s=o;Zr.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(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(Xr.is.element(e)&&!Xr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Xr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Xr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Xr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return Xr.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=Xr.getHours(e),o=Xr.getMinutes(e),a=Xr.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(a)},replaceAll: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())},toTitleCase:function(){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()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Xr.replaceAll(e,"-"," "),e=Xr.replaceAll(e,"_"," "),e=Xr.toTitleCase(e),Xr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Yr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Yr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Xr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return Xr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Jr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Jr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=Xr.parseUrl(e).search);return Xr.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Kr(n,2),r=i[0],o=i[1];return Object.assign(e,Yr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getHTML:function(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},Zr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),a=o.isIPhone&&n&&Zr.playsinline;switch(t+":"+e){case"html5:video":r=(i=Zr.video)&&Zr.rangeInput&&(!o.isIPhone||a);break;case"html5:audio":r=(i=Zr.audio)&&Zr.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Zr.rangeInput&&(!o.isIPhone||a);break;default:r=(i=Zr.audio&&Zr.video)&&Zr.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement("video").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Hr=document.createElement("input"),Hr.type="range","range"===Hr.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},eo={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=eo.getSources.call(this);if(Xr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Xr.is.empty(e.getAttribute("size"))});return Xr.is.empty(t)?null:Xr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=eo.getSources.call(e);if(Xr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Xr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=eo.getSources.call(e);if(!Xr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Xr.is.empty(i)){var r=i.filter(function(t){return Zr.mime.call(e,t.getAttribute("type"))});if(!Xr.is.empty(r)){Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=o,e.off("loadedmetadata",t)}),e.media.load(),a&&e.play(),Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(eo.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},to=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t))return"";var n=Xr.getDeep(t.i18n,e);if(Xr.is.empty(n))return"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Kr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},no=Xr.getBrowser(),io={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||no.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime),duration:Xr.getElement.call(this,this.config.selectors.display.duration)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=io.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Xr.setAttributes(r,Xr.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+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,t){var n=to(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement("span",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement("button"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}return o?(n.appendChild(io.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(io.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(io.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(io.createLabel.call(this,a,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(io.createIcon.call(this,s)),n.appendChild(io.createLabel.call(this,a))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),"play"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},to(e,this.config)),i=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,io.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement("progress",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Xr.createElement("span",null,"0"));var i="";switch(e){case"played":i=to("played",this.config);break;case"buffer":i=to("buffered",this.config)}n.innerText="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.getAttributesFromSelector(this.config.selectors.display[e]),n=Xr.createElement("div",Xr.extend(t,{class:"plyr__time "+t.class,"aria-label":to(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e){var t=e.value,n=e.list,i=e.type,r=e.title,o=e.badge,a=void 0===o?null:o,s=e.checked,l=void 0!==s&&s,c=Xr.createElement("li"),u=Xr.createElement("label",{class:this.config.classNames.control}),f=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:t,checked:l,class:"plyr__sr-only"})),d=Xr.createElement("span",{hidden:""});u.appendChild(f),u.appendChild(d),u.insertAdjacentHTML("beforeend",r),Xr.is.element(a)&&u.appendChild(a),c.appendChild(u),n.appendChild(c)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.innerText=Xr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&io.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,io.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Xr.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=Xr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&io.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=Xr.is.number(n)?n:0,r=Xr.is.element(e)?e:t.elements.display.buffer;if(Xr.is.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];Xr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),no.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),io.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Xr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;io.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||io.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&io.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&io.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),io.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Xr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Xr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Xr.is.empty(this.options.quality)&&this.options.quality.length>1;if(io.toggleTab.call(this,"quality",i),io.checkMenu.call(this),i){Xr.emptyElement(n);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){io.createMenuItem.call(t,{value:e,list:n,type:"quality",title:io.getLabel.call(t,"quality",e),badge:function(e){var n=to("qualityBadge."+e,t.config);return n.length?io.createBadge.call(t,n):null}(e)})}),io.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?to("normal",this.config):t+"&times;";case"quality":if(Xr.is.number(t)){var n=to("qualityLabel."+t,this.config);return n.length?n:t+"p"}return Xr.toTitleCase(t);case"captions":return ro.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.currentTrack;break;default:if(r=Xr.is.empty(n)?this[e]:n,Xr.is.empty(r)&&(r=this.config[e].default),!Xr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Xr.is.element(o)||(o=i&&i.querySelector("ul")),Xr.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=io.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value="'+r+'"]');Xr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=ro.getTracks.call(this);if(io.toggleTab.call(this,"captions",n.length),Xr.emptyElement(t),io.checkMenu.call(this),n.length){var i=n.map(function(n,i){return{value:i,checked:e.captions.active&&e.currentTrack===i,title:ro.getLabel.call(e,n),badge:n.language&&io.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});i.unshift({value:-1,checked:!this.captions.active,title:to("disabled",this.config),list:t,type:"language"}),i.forEach(io.createMenuItem.bind(this)),io.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Xr.is.element(this.elements.settings.panes.speed)){Xr.is.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 n=!Xr.is.empty(this.options.speed)&&this.options.speed.length>1;if(io.toggleTab.call(this,"speed",n),io.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Xr.emptyElement(i),this.options.speed.forEach(function(e){io.createMenuItem.call(t,{value:e,list:i,type:"speed",title:io.getLabel.call(t,"speed",e)})}),io.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Xr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Xr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&t.hasAttribute("hidden");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute("aria-expanded",i),Xr.is.element(t)&&(Xr.toggleHidden(t,!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Xr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Zr.transitions&&!Zr.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var o=io.getTabSize.call(this,n);Xr.on(r,Xr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Xr.off(r,Xr.transitionEndEvent,e))}),r.style.width=o.width+"px",r.style.height=o.height+"px"}Xr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Xr.toggleHidden(n,!1);var a=Xr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(a).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(io.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(io.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(io.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(io.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=io.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(io.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Xr.createElement("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(io.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(io.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(io.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=Xr.createElement("div",{class:"plyr__volume"}),s={max:1,step:.05,value:this.config.volume},l=io.createRange.call(this,"volume",Xr.extend(s,{id:"plyr-volume-"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(io.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(io.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Xr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=Xr.createElement("div"),d=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Xr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Xr.createElement("li",{role:"tab",hidden:""}),r=Xr.createElement("button",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),to(n,t.config)),o=Xr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),d.appendChild(h),f.appendChild(d),this.config.settings.forEach(function(n){var i=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Xr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},to(n,t.config));i.appendChild(r);var o=Xr.createElement("ul");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Zr.pip&&n.appendChild(io.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Zr.airplay&&n.appendChild(io.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(io.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(io.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&io.setQualityMenu.call(this,eo.getQualityOptions.call(this)),io.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=io.getIconUrl.call(this);t.cors&&Xr.loadSprite(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;Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?n=this.config.controls:Xr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=io.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ro.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Kr(e,2),i=n[0],r=n[1];t=Xr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Xr.is.string(this.config.controls)?n=o(n):Xr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(a)||(a=this.elements.container),Xr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),Xr.is.element(this.elements.controls)||io.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Xr.repaint(a),this.config.tooltips.controls){var s=Xr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},ro={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Zr.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this);else{if(Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Xr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}var t=this.storage.get("captions");Xr.is.boolean(t)||(t=this.config.captions.active);var n=this.storage.get("language")||this.config.captions.language;if("auto"===n){var i=(navigator.language||navigator.userLanguage).split("-");n=Kr(i,1)[0]}if(ro.setLanguage.call(this,n,t),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";Xr.on(this.media.textTracks,r,ro.update.bind(this))}setTimeout(ro.update.bind(this),0)}},update:function(){var e=this,t=ro.getTracks.call(this,!0),n=this.captions,i=n.language,r=n.meta;this.isHTML5&&this.isVideo&&t.filter(function(e){return!r.get(e)}).forEach(function(t){e.debug.log("Track added",t),r.set(t,{default:"showing"===t.mode}),t.mode="hidden",Xr.on(t,"cuechange",function(){return ro.updateCues.call(e)})});var o=!t.find(function(t){return t===e.captions.currentTrackNode}),a=this.language!==i&&t.find(function(e){return e.language===i});(o||a)&&ro.setLanguage.call(this,i,this.config.captions.active),Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this)},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=ro.getTracks.call(this);if(-1!==e)if(Xr.is.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var r=ro.getCurrentTrack.call(this),o=(r||{}).language;this.captions.currentTrackNode=r,t&&(this.captions.language=o),this.isVimeo&&this.embed.enableTextTrack(o),Xr.dispatchEvent.call(this,this.media,"languagechange")}this.isHTML5&&this.isVideo&&ro.updateCues.call(this),n&&this.toggleCaptions(!0)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else this.toggleCaptions(!1)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(Xr.is.string(e)){this.captions.language=e.toLowerCase();var n=ro.getTracks.call(this),i=ro.getCurrentTrack.call(this,!0);ro.set.call(this,n.indexOf(i),!1,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)})},getCurrentTrack:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=ro.getTracks.call(this),i=function(t){return Number((e.captions.meta.get(t)||{}).default)},r=Array.from(n).sort(function(e,t){return i(t)-i(e)});return!t&&n[this.currentTrack]||r.find(function(t){return t.language===e.captions.language})||r[0]},getLabel:function(e){var t=e;return!Xr.is.track(t)&&Zr.textTracks&&this.captions.active&&(t=ro.getCurrentTrack.call(this)),Xr.is.track(t)?Xr.is.empty(t.label)?Xr.is.empty(t.language)?to("enabled",this.config):e.language.toUpperCase():t.label:to("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions))if(Xr.is.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=ro.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Xr.getHTML)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){Xr.emptyElement(this.elements.captions);var r=Xr.createElement("span",Xr.getAttributesFromSelector(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),Xr.dispatchEvent.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},oo=function(){},ao=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];zr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Gr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):oo}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):oo}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):oo}}]),e}(),so={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.11/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"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",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",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:{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,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","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"]',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",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",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:""}},lo=Xr.getBrowser();function co(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),lo.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function uo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),co.call(this)}var fo=function(){function e(t){var n=this;zr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Xr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){co.call(n)}),Xr.on(this.player.elements.container,"dblclick",function(e){Xr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Gr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(lo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():uo.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(lo.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else uo.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[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return lo.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(Xr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Xr.is.function(document[t+"ExitFullscreen"])&&!Xr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),ho=Xr.getBrowser(),po={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void po.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(io.inject.call(this),this.listeners.controls()),po.toggleNativeControls.call(this),this.isHTML5&&ro.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,io.updateVolume.call(this),io.timeUpdate.call(this),po.checkPlaying.call(this),Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Zr.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Zr.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,ho.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,"ready")},0),po.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&po.setPoster.call(this,this.poster),this.config.duration&&io.durationUpdate.call(this)},setTitle:function(){var e=to("play",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Xr.getElement.call(this,"iframe");if(!Xr.is.element(t))return;var n=Xr.is.empty(this.config.title)?"video":this.config.title,i=to("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!Xr.is.element(this.elements.poster))return Promise.reject();var n=Xr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),po.togglePoster.call(t,!0),e});return n.catch(function(){return po.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Xr.toggleState(this.elements.buttons.play,this.playing),Xr.is.event(e)&&"timeupdate"===e.type||po.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(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),po.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},go=Xr.getBrowser(),mo=function(){function e(t){zr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Gr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&o!==this.player.elements.inputs.seek&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){io.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Xr.toggleListener(document.body,"click",this.toggleMenu,e),Xr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Xr.on(this.player.elements.container,"focusout",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Xr.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(po.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(Xr.on(this.player.media,"timeupdate seeking seeked",function(t){return io.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return io.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,"loadeddata",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Xr.on(this.player.media,"progress playing seeking seeked",function(t){return io.updateProgress.call(e.player,t)}),Xr.on(this.player.media,"volumechange",function(t){return io.updateVolume.call(e.player,t)}),Xr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return po.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,"waiting canplay seeked playing",function(t){return po.checkLoading.call(e.player,t)}),Xr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Xr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,"ratechange",function(){io.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Xr.on(this.player.media,"qualitychange",function(t){io.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Xr.on(this.player.media,"languagechange",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,"captionsenabled captionsdisabled",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n=t.detail,i=void 0===n?{}:n;"error"===t.type&&(i=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=go.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Xr.is.function(r)&&(o=r.call(e.player,t)),o&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Xr.is.function(s);Xr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){io.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";io.showTab.call(e.player,t)};if(Xr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.currentTrack=Number(t.target.value),i()},"language");else if(Xr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Xr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;io.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),i(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=t.keyCode?t.keyCode:t.which,r=t.type;if("keydown"!==r&&"keyup"!==r||39===i||37===i){var o=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(t.type);o&&a?(n.removeAttribute("play-on-seeked"),e.player.play()):!a&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");Xr.is.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,io.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),go.isWebkit&&i(Xr.getElements.call(this.player,'input[type="range"]'),"input",function(t){io.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return io.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Xr.toggleClass(r.controls,i.classNames.noTransition,"focusin"===t.type),po.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){Xr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function yo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var vo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),vo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?vo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.sdk).then(function(){vo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Xr.buildUrlParams(n),r=t.media.getAttribute("src");Xr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Xr.parseVimeoId(r),a=Xr.createElement("iframe"),s=Xr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=Xr.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Xr.replaceElement(l,t.media),Xr.fetch(Xr.format(t.config.urls.vimeo.api,o),"json").then(function(e){if(!Xr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",po.setPoster.call(t,n.href)}}),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 yo.call(t,!0),t.embed.play()},t.media.pause=function(){return yo.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,Xr.dispatchEvent.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,Xr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&io.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return d},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){d=n,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);vo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,po.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,ro.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return Xr.stripHTML(e.text)});ro.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){yo.call(t,!e),e||Xr.dispatchEvent.call(t,t.media,"playing")}),Xr.is.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){yo.call(t,!0),Xr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){yo.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return po.build.call(t)},0)}};function bo(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function wo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var Eo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Eo.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?Eo.ready.call(this):(Xr.loadScript(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(){Eo.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void po.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r=Xr.format(this.config.urls.youtube.api,e,i);Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,po.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Xr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement("div",{id:r});e.media=Xr.replaceElement(o,e.media);var a=function(e){return"https://img.youtube.com/vi/"+i+"/"+e+"default.jpg"};Xr.loadImage(a("maxres"),121).catch(function(){return Xr.loadImage(a("sd"),121)}).catch(function(){return Xr.loadImage(a("hq"))}).then(function(t){return po.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Eo.getTitle.call(e,i),e.media.play=function(){wo.call(e,!0),n.playVideo()},e.media.pause=function(){wo.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.mute(),e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return bo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(bo(i)),Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Xr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Xr.dispatchEvent.call(e,e.media,"timeupdate"),Xr.dispatchEvent.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)&&Xr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return po.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Xr.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:Xr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,"progress");break;case 0:wo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Xr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(wo.call(e,!0),Xr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Xr.dispatchEvent.call(e,e.media,"durationchange")),io.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Xr.is.empty(n)?n:Xr.dedupe(n.map(function(e){return bo(e)})))));break;case 2:e.muted||e.embed.unMute(),wo.call(e,!1)}Xr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},ko={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Xr.createElement("div",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper),this.elements.poster=Xr.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":Eo.setup.call(this);break;case"vimeo":vo.setup.call(this)}else this.isHTML5&&eo.extend.call(this);else this.debug.warn("No media element found!")}},To=function(){function e(t){var n=this;zr(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 Gr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(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=Xr.createElement("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=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=to("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Xr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Xr.is.element(n)){var i=100/t.player.duration*e,r=Xr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Xr.dispatchEvent.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=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Xr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.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=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Xr.is.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: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Xr.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Xr.buildUrlParams(e)}}]),e}(),So={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&"sources"in e&&e.sources.length?(eo.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Jr.html5:e.sources[0].provider,t.supported=Zr.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Xr.createElement("video");break;case"html5:audio":t.media=Xr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Xr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),Xr.is.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","")),po.addStyleHook.call(t),t.isHTML5&&So.insertElements.call(t,"source",e.sources),t.config.title=e.title,ko.setup.call(t),t.isHTML5&&("tracks"in e&&So.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&po.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Ao=function(){function e(t,n){var i=this;if(zr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Zr.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},so,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new ao(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Zr),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Zr.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,l=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),Xr.is.element(a)){if(s=a.getAttribute("src"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className="",l=Xr.getUrlParams(s),!Xr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Jr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=$r.video;break;case"video":case"audio":this.type=o,this.provider=Jr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("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=Zr.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new mo(this),this.storage=new Qr(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement("div"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),po.addStyleHook.call(this),ko.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&po.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new fo(this),this.ads=new To(this),this.config.autoplay&&this.play()):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 Gr(e,[{key:"play",value:function(){return Xr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):Xr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Xr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);Xr.toggleState(this.elements.buttons.captions,t),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,Xr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Zr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Xr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)&&io.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Xr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Xr.off(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&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),po.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Zr.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Jr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Jr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Jr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===$r.video)}},{key:"isAudio",get:function(){return Boolean(this.type===$r.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=Xr.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Xr.is.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||0;return e||t}},{key:"volume",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get("volume")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Xr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get("muted")),Xr.is.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;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get("speed")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Xr.is.empty(e)||(t=Number(e)),Xr.is.number(t)||(t=this.storage.get("quality")),Xr.is.number(t)||(t=this.config.quality.selected),Xr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Xr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Xr.is.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){So.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?po.setPoster.call(this,e):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=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){ro.set.call(this,e)},get:function(){var e=this.captions,t=e.active,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){ro.setLanguage.call(this,e)},get:function(){return(ro.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Zr.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Zr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Zr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Xr.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Xr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Xr.is.nodeList(t)?i=Array.from(t):Xr.is.array(t)&&(i=t.filter(Xr.is.element)),Xr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return Ao.defaults=Xr.cloneDeep(so),Ao});
+"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";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=d(t,!0),o(n),f)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),T=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},S=function(e,t,n){if(T(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,d=e&A.P,h=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=h&&a?S(s,n):d&&"function"==typeof s?S(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),d&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),M=E("view"),x=!(!n.ArrayBuffer||!n.DataView),L=x,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,M,!0)):L=!1;var j={ABV:x,CONSTR:L,TYPED:P,VIEW:M},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},U=Math.min,V=function(e){return e>0?U(B(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=B(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(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}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),ae=oe.concat("length","prototype"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),fe=p.f,de=ue("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,de)&&fe(e,de,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,d=n.RangeError,h=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?"_b":"buffer",T=s?"_l":"byteLength",S=s?"_o":"byteOffset";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,d=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*d,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-h:h;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function M(e){return[255&e,e>>8&255]}function x(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[T])throw d(l);var o=e[k]._b,a=r+e[S],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[T])throw d(l);for(var s=e[k]._b,c=a+e[S],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var U,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(U=W[z++])in c||m(c,U,g[U]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=D(e);this._b=ce.call(new Array(t),0),this[T]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[T],r=B(t);if(r<0||r>i)throw d("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw d("Wrong length!");this[k]=e,this[S]=r,this[T]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,M,t,arguments[2])},setUint16:function(e,t){q(this,2,e,M,t,arguments[2])},setInt32:function(e,t){q(this,4,e,x,t,arguments[2])},setUint32:function(e,t){q(this,4,e,x,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[ge])?t:T(n)},ye=ue("species"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Te=we.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Te&&void 0===t)return Te.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(me(this,we))(V(r-i)),s=new Ee(this),l=new Ee(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},Me=ue("iterator"),xe=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||xe[Me]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},Ue=te("IE_PROTO"),Ve=Object.prototype,De=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ue)?e[Ue]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ye;return function(t,c,u){for(var f,d,h=le(t),p=z(h),g=S(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(d=g(f=p[y],y,h),e))if(n)v[y]=d;else if(d)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;null==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?d?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=De(w.call(new e)))!==Object.prototype&&c.next&&(he(c,f,!0),v(c,tt)||m(c,tt,it)),d&&g&&"values"!==g.name&&(h=!0,y=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[f]=it,r)if(s={values:d?y:u("values"),keys:o?y:u("keys"),entries:b},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(nt||h),t,s);return s},ot=rt(Array,"Array",function(e,t){this._t=Y(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,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,$e("keys"),$e("values"),$e("entries");var at=ue("iterator"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ft=Object.getOwnPropertyDescriptor,dt={f:s?ft:function(e,t){if(e=Y(e),t=d(t,!0),f)try{return ft(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=pe,u=S,f=F,h=g,y=m,b=I,w=B,k=V,T=D,A=J,_=d,P=v,M=Ce,x=r,L=le,O=Le,N=Be,R=De,q=se.f,U=We,H=E,W=ue,z=Ke,G=$,Y=me,K=ot,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=dt,re=ne.f,oe=ie.f,ae=t.RangeError,fe=t.TypeError,de=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Te=z(5),Se=z(6),Ae=G(!0),_e=G(!1),Me=K.values,xe=K.keys,Oe=K.entries,Ne=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,qe=he.slice,Ue=he.toString,Ve=he.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new de(new Uint16Array([1]).buffer)[0]}),et=!!de&&!!de.prototype.set&&i(function(){new de(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae("Wrong offset!");return n},nt=function(e){if(x(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(x(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return at(Y(e,e[Ye]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,d=U(s);if(null!=d&&!O(d)){for(a=d.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ft=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!de&&i(function(){Ve.call(new de(1))}),pt=function(){return Ve.apply(ht?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw ae("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return xe.call(nt(this))},values:function(){return Me.call(nt(this))}},bt=function(e,t){return x(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&x(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ue.call({})})&&(Ue=Ve=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ue,toLocaleString:pt}),st(kt,"buffer","b"),st(kt,"byteOffset","o"),st(kt,"byteLength","l"),st(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,d=t[s],h=d||{},p=d&&R(d),g=!d||!l.ABV,m={},v=d&&d.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(d=r(function(e,t,i,r){f(e,d,s,"_d");var o,a,l,c,u=0,h=0;if(x(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=M(t))||"SharedArrayBuffer"==c))return Je in t?at(d,t):ut.call(d,t);o=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae("Wrong length!");if((a=p-h)<0)throw ae("Wrong length!")}else if((a=k(r)*n)+h>p)throw ae("Wrong length!");l=a/n}else l=T(t),o=new ge(a=l*n);for(y(e,"_d",{b:o,o:h,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=d.prototype=N(kt),y(v,"constructor",d)):i(function(){d(1)})&&i(function(){new d(-1)})&&X(function(e){new d,new d(null),new d(1.5),new d(e)},!0)||(d=r(function(e,t,i,r){var o;return f(e,d,s),x(t)?t instanceof ge||"ArrayBuffer"==(o=M(t))||"SharedArrayBuffer"==o?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?at(d,t):ut.call(d,t):new h(T(t))}),be(p!==Function.prototype?q(h).concat(q(p)):q(h),function(e){e in d||y(d,e,h[e])}),d.prototype=v,v.constructor=d);var w=v[He],E=!!w&&("values"==w.name||null==w.name),S=vt.values;y(d,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ye,d),(a?new d(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=d,o(o.G+o.W+o.F*(d!=h),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){h.of.call(d,1)}),s,{from:ut,of:ft}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Ue&&(v.toString=Ue),o(o.P+o.F*i(function(){new d(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:S,E||y(v,He,S)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,d=s?function(){return e}:We(e),h=S(r,a,i?2:1),p=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Le(d)){for(l=V(e.length);l>p;p++)if((f=i?h(o(c=e[p])[0],c[1]):h(e[p]))===t||f===n)return f}else for(u=d.call(e);!(c=u.next()).done;)if((f=pt(u,h,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=mt.fastKey,wt=s?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&&gt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=S(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),s&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},Tt=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},St={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=S(Function.call,dt.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return Tt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:Tt},At=St.set,_t=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",d=u&&u.prototype,h={},p=function(e){var t=d[e];k(d,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||d.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return null!=n&&gt(n,s,i[f],i),i})).prototype=d,d.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||m)&&p(f),l&&d.clear&&delete d.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||o.setStrong(u,e,s),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,Mt=!Pt||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Pt,xt=mt.getWeak,Lt=Ke(5),Ot=Ke(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&&gt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=xt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},f=e.exports=_t("WeakMap",c,u,Rt,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),Mt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;C(C.S+C.F*!a(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=T(e),r=o(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Ut=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Dt={},Ht=Function.bind||function(e){var t=T(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Dt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Dt[t]=Function("F,a","return new F("+i.join(",")+")")}return Dt[t](e,n)}(t,r.length,r):Ut(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),"Reflect",{construct:function(e,t){T(e),o(t);var n=arguments.length<3?e:T(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Be(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=d(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=dt.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=dt.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=De(t))?e(a,n,s):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return dt.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return De(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=dt.f(o(t),n);if(!c){if(r(s=De(t)))return e(s,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((a=dt.f(l,n)||g(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Ut("function"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(S(cn,e,1))}:an&&an.now?Xt=function(e){an.now(S(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=S(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(S(cn,e,1),0)});var fn={set:nn,clear:rn},dn=fn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=T(t),this.reject=T(n)}var vn,bn,wn,En,kn={f:function(e){return new yn(e)}},Tn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=fn.set,An=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){dn.call(n,r)};else{var a=!0,s=document.createTextNode("");new hn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),_n=n.TypeError,Cn=n.process,Pn=n.Promise,Mn="process"==Ce(Cn),xn=function(){},Ln=bn=kn.f,On=!!function(){try{var e=Pn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Mn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;An(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(_n("Promise-chain cycle")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Sn.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Tn(function(){Mn?Cn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Mn||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){Sn.call(n,function(){var t;Mn?Cn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=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()),jn(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _n("Promise can't be resolved itself");(t=Nn(e))?An(function(){var i={_w:n,_d:!1};try{t.call(e,S(Bn,i,1),S(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Pn=function(e){F(this,Pn,"Promise","_h"),T(e),vn.call(this);try{e(S(Bn,this,1),S(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Pn.prototype,{then:function(e,t){var n=Ln(me(this,Pn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Mn?Cn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=S(Bn,e,1),this.reject=S(qn,e,1)},kn.f=Ln=function(e){return e===Pn||e===En?new wn(e):bn(e)}),C(C.G+C.W+C.F*!On,{Promise:Pn}),he(Pn,"Promise"),ve("Promise"),En=i.Promise,C(C.S+C.F*!On,"Promise",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!On,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=kn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(On&&lt(function(e){Pn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=Tn(function(){var n=[],o=0,a=1;gt(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=Ln(t),i=n.reject,r=Tn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Un={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Un.f(e)})},Hn=se.f,Wn={}.toString,zn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&"[object Window]"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(Y(e))}},Yn=mt.KEY,Kn=dt.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue("_hidden"),ti=ue("toPrimitive"),ni={}.propertyIsEnumerable,ii=Z("symbol-registry"),ri=Z("symbols"),oi=Z("op-symbols"),ai=Object.prototype,si="function"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Be(Qn({},"a",{get:function(){return Qn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Kn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,fi=function(e){var t=ri[e]=Be($n.prototype);return t._k=e,t},di=si&&"symbol"==typeof $n.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof $n},hi=function(e,t,n){return e===ai&&hi(oi,t,n),o(e),t=d(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Be(n,{enumerable:g(0,!1)})):(v(e,ei)||Qn(e,ei,g(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)hi(e,n=i[r++],t[n]);return e},gi=function(e){var t=ni.call(this,e=d(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},mi=function(e,t){if(e=Y(e),t=d(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Kn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(Y(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:Y(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(k(($n=function(){if(this instanceof $n)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,g(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),fi(e)}).prototype,"toString",function(){return this._k}),dt.f=mi,p.f=hi,se.f=Gn.f=yi,ut.f=gi,Ct.f=vi,s&&k(ai,"propertyIsEnumerable",gi,!0),Un.f=function(e){return fi(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:$n});for(var bi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),wi=0;bi.length>wi;)ue(bi[wi++]);for(var Ei=Oe(ue.store),ki=0;Ei.length>ki;)Dn(Ei[ki++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return v(ii,e+="")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?Be(e):pi(Be(e),t)},defineProperty:hi,defineProperties:pi,getOwnPropertyDescriptor:mi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||a(function(){var e=$n();return"[null]"!=Zn([e])||"{}"!=Zn({a:e})||"{}"!=Zn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||m($n.prototype,ti,$n.prototype.valueOf),he($n,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var Ti=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),"Object",r)},Si=mt.onFreeze;Ti("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ai=mt.onFreeze;Ti("seal",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}});var _i=mt.onFreeze;Ti("preventExtensions",function(e){return function(t){return e&&r(t)?e(_i(t)):t}}),Ti("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Ci=dt.f;Ti("getOwnPropertyDescriptor",function(){return function(e,t){return Ci(Y(e),t)}}),Ti("getPrototypeOf",function(){return function(e){return De(le(e))}}),Ti("keys",function(){return function(e){return Oe(le(e))}}),Ti("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:Mt});var Pi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Pi});var Mi=p.f,xi=Function.prototype,Li=/^\s*function ([^ (]*)/;"name"in xi||s&&Mi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Li)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=B(t),a=r.length;return o<0||o>=a?ji?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Fi});var Ri=ue("match"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(qi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Ui=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ui]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi("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]}),Wi("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]}),Wi("split",2,function(e,t,n){var i=qi,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,f,d=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(a||(s=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(d.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(d,l.slice(1)),u=l[0].length,p=c,d.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||d.push(""):d.push(n.slice(p)),d.length>g?d.slice(0,g):d}}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]}),Wi("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 zi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=We(o);if(c&&(l=S(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Le(f))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),$e("copyWithin");var Gi=Ke(5),Yi=!0;"find"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Ki=Ke(6),Qi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Qi=!1}),C(C.P+C.F*Qi,"Array",{findIndex:function(e){return Ki(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),C(C.P,"Array",{fill:ce}),$e("fill");var Ji=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};C(C.S,"Number",{isInteger:Xi});var Zi=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;C(C.S+C.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;C(C.S+C.F*!(ir&&1/ir(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;C(C.S+C.F*!(rr&&1/rr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;C(C.S,"Math",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(lr!=Math.expm1),"Math",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),fr=cr(2,-23),dr=cr(2,127)*(2-fr),hr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<hr?r*(i/hr/fr+1/ur-1/ur)*hr*fr:(n=(t=(1+fr/ur)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:pr});var gr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=gr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var mr=Math.imul;C(C.S+C.F*a(function(){return-5!=mr(4294967295,5)||2!=mr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:er}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:or});var yr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);C(C.P,"Array",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var wr=ut.f,Er=function(e){return function(t){for(var n,i=Y(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},kr=Er(!1);C(C.S,"Object",{values:function(e){return kr(e)}});var Tr=Er(!0);C(C.S,"Object",{entries:function(e){return Tr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=dt.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Sr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Ar=n.navigator,_r=Ar&&Ar.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Cr=[].slice,Pr=/MSIE .\./.test(_r),Mr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Cr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Pr,{setTimeout:Mr(n.setTimeout),setInterval:Mr(n.setInterval)}),C(C.G+C.B,{setImmediate:fn.set,clearImmediate:fn.clear});for(var xr=ue("iterator"),Lr=ue("toStringTag"),Or=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Br=n[Rr],Ur=Br&&Br.prototype;if(Ur&&(Ur[xr]||m(Ur,xr,Or),Ur[Lr]||m(Ur,Lr,Rr),Pe[Rr]=Or,qr))for(Fr in ot)Ur[Fr]||k(Ur,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",d="executing",h="completed",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(x([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=T.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=T,T.constructor=k,T[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,T):(e.__proto__=T,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},S(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=x,M.prototype={constructor:M,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:x(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new M(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===d)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=d;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function T(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function M(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function x(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=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};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}!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",{value:{}}),"string"==typeof e){if(""!==e)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]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},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.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(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(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].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.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},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},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),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 Hr,Wr=t(function(e,t){var n;n=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,f=i.before||e,d=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=d):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=d:((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!==f(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},e.exports=n()}),zr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Gr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Yr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Kr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var 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&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Qr=function(){function e(t){zr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Gr(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(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}(),Jr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},$r={audio:"audio",video:"video"},Xr={is:{object:function(e){return Xr.getConstructor(e)===Object},number:function(e){return Xr.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return Xr.getConstructor(e)===String},boolean:function(e){return Xr.getConstructor(e)===Boolean},function:function(e){return Xr.getConstructor(e)===Function},array:function(e){return!Xr.is.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return Xr.is.instanceof(e,WeakMap)},nodeList:function(e){return Xr.is.instanceof(e,NodeList)},element:function(e){return Xr.is.instanceof(e,Element)},textNode:function(e){return Xr.getConstructor(e)===Text},event:function(e){return Xr.is.instanceof(e,Event)},cue:function(e){return Xr.is.instanceof(e,window.TextTrackCue)||Xr.is.instanceof(e,window.VTTCue)},track:function(e){return Xr.is.instanceof(e,TextTrack)||!Xr.is.nullOrUndefined(e)&&Xr.is.string(e.kind)},url:function(e){return!Xr.is.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return Xr.is.nullOrUndefined(e)||(Xr.is.string(e)||Xr.is.array(e)||Xr.is.nodeList(e))&&!e.length||Xr.is.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)}},getConstructor:function(e){return Xr.is.nullOrUndefined(e)?null:e.constructor},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(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})})},loadScript:function(e){return new Promise(function(t,n){Wr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.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=Qr.supported,a=document.createElement("div");if(Xr.toggleHidden(a,!0),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var l=JSON.parse(s);r(a,l.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||(o&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):Xr.is.element(e)&&Xr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Kr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n},toggleHidden:function(e,t){if(Xr.is.element(e)){var n=t;Xr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,"keydown",o,!1):Xr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(" "),s=o;Zr.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(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(Xr.is.element(e)&&!Xr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Xr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Xr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Xr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return Xr.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=Xr.getHours(e),o=Xr.getMinutes(e),a=Xr.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(a)},replaceAll: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())},toTitleCase:function(){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()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Xr.replaceAll(e,"-"," "),e=Xr.replaceAll(e,"_"," "),e=Xr.toTitleCase(e),Xr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Yr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Yr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Xr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return Xr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Jr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Jr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=Xr.parseUrl(e).search);return Xr.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Kr(n,2),r=i[0],o=i[1];return Object.assign(e,Yr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getHTML:function(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},Zr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),a=o.isIPhone&&n&&Zr.playsinline;switch(t+":"+e){case"html5:video":r=(i=Zr.video)&&Zr.rangeInput&&(!o.isIPhone||a);break;case"html5:audio":r=(i=Zr.audio)&&Zr.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Zr.rangeInput&&(!o.isIPhone||a);break;default:r=(i=Zr.audio&&Zr.video)&&Zr.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement("video").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Hr=document.createElement("input"),Hr.type="range","range"===Hr.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},eo={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=eo.getSources.call(this);if(Xr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Xr.is.empty(e.getAttribute("size"))});return Xr.is.empty(t)?null:Xr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=eo.getSources.call(e);if(Xr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Xr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=eo.getSources.call(e);if(!Xr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Xr.is.empty(i)){var r=i.filter(function(t){return Zr.mime.call(e,t.getAttribute("type"))});if(!Xr.is.empty(r)){Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=o,e.off("loadedmetadata",t)}),e.media.load(),a&&e.play(),Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(eo.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},to=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t))return"";var n=Xr.getDeep(t.i18n,e);if(Xr.is.empty(n))return"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Kr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},no=Xr.getBrowser(),io={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||no.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime),duration:Xr.getElement.call(this,this.config.selectors.display.duration)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=io.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Xr.setAttributes(r,Xr.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+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,t){var n=to(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement("span",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement("button"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}return o?(n.appendChild(io.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(io.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(io.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(io.createLabel.call(this,a,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(io.createIcon.call(this,s)),n.appendChild(io.createLabel.call(this,a))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),"play"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},to(e,this.config)),i=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,io.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement("progress",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Xr.createElement("span",null,"0"));var i="";switch(e){case"played":i=to("played",this.config);break;case"buffer":i=to("buffered",this.config)}n.innerText="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.getAttributesFromSelector(this.config.selectors.display[e]),n=Xr.createElement("div",Xr.extend(t,{class:"plyr__time "+t.class,"aria-label":to(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e){var t=e.value,n=e.list,i=e.type,r=e.title,o=e.badge,a=void 0===o?null:o,s=e.checked,l=void 0!==s&&s,c=Xr.createElement("li"),u=Xr.createElement("label",{class:this.config.classNames.control}),f=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:t,checked:l,class:"plyr__sr-only"})),d=Xr.createElement("span",{hidden:""});u.appendChild(f),u.appendChild(d),u.insertAdjacentHTML("beforeend",r),Xr.is.element(a)&&u.appendChild(a),c.appendChild(u),n.appendChild(c)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.innerText=Xr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&io.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,io.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Xr.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=Xr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&io.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=Xr.is.number(n)?n:0,r=Xr.is.element(e)?e:t.elements.display.buffer;if(Xr.is.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];Xr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),no.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),io.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Xr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;io.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||io.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&io.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&io.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),io.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Xr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Xr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Xr.is.empty(this.options.quality)&&this.options.quality.length>1;if(io.toggleTab.call(this,"quality",i),io.checkMenu.call(this),i){Xr.emptyElement(n);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){io.createMenuItem.call(t,{value:e,list:n,type:"quality",title:io.getLabel.call(t,"quality",e),badge:function(e){var n=to("qualityBadge."+e,t.config);return n.length?io.createBadge.call(t,n):null}(e)})}),io.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?to("normal",this.config):t+"&times;";case"quality":if(Xr.is.number(t)){var n=to("qualityLabel."+t,this.config);return n.length?n:t+"p"}return Xr.toTitleCase(t);case"captions":return ro.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.currentTrack;break;default:if(r=Xr.is.empty(n)?this[e]:n,Xr.is.empty(r)&&(r=this.config[e].default),!Xr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Xr.is.element(o)||(o=i&&i.querySelector("ul")),Xr.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=io.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value="'+r+'"]');Xr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=ro.getTracks.call(this);if(io.toggleTab.call(this,"captions",n.length),Xr.emptyElement(t),io.checkMenu.call(this),n.length){var i=n.map(function(n,i){return{value:i,checked:e.captions.active&&e.currentTrack===i,title:ro.getLabel.call(e,n),badge:n.language&&io.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});i.unshift({value:-1,checked:!this.captions.active,title:to("disabled",this.config),list:t,type:"language"}),i.forEach(io.createMenuItem.bind(this)),io.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Xr.is.element(this.elements.settings.panes.speed)){Xr.is.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 n=!Xr.is.empty(this.options.speed)&&this.options.speed.length>1;if(io.toggleTab.call(this,"speed",n),io.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Xr.emptyElement(i),this.options.speed.forEach(function(e){io.createMenuItem.call(t,{value:e,list:i,type:"speed",title:io.getLabel.call(t,"speed",e)})}),io.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Xr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Xr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&t.hasAttribute("hidden");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute("aria-expanded",i),Xr.is.element(t)&&(Xr.toggleHidden(t,!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Xr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Zr.transitions&&!Zr.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var o=io.getTabSize.call(this,n);Xr.on(r,Xr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Xr.off(r,Xr.transitionEndEvent,e))}),r.style.width=o.width+"px",r.style.height=o.height+"px"}Xr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Xr.toggleHidden(n,!1);var a=Xr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(a).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(io.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(io.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(io.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(io.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=io.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(io.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Xr.createElement("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(io.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(io.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(io.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=Xr.createElement("div",{class:"plyr__volume"}),s={max:1,step:.05,value:this.config.volume},l=io.createRange.call(this,"volume",Xr.extend(s,{id:"plyr-volume-"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(io.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(io.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Xr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=Xr.createElement("div"),d=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Xr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Xr.createElement("li",{role:"tab",hidden:""}),r=Xr.createElement("button",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),to(n,t.config)),o=Xr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),d.appendChild(h),f.appendChild(d),this.config.settings.forEach(function(n){var i=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Xr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},to(n,t.config));i.appendChild(r);var o=Xr.createElement("ul");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Zr.pip&&n.appendChild(io.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Zr.airplay&&n.appendChild(io.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(io.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(io.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&io.setQualityMenu.call(this,eo.getQualityOptions.call(this)),io.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=io.getIconUrl.call(this);t.cors&&Xr.loadSprite(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;Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?n=this.config.controls:Xr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=io.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ro.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Kr(e,2),i=n[0],r=n[1];t=Xr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Xr.is.string(this.config.controls)?n=o(n):Xr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(a)||(a=this.elements.container),Xr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),Xr.is.element(this.elements.controls)||io.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Xr.repaint(a),this.config.tooltips.controls){var s=Xr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},ro={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Zr.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this);else{if(Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Xr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}var t=this.storage.get("captions");Xr.is.boolean(t)||(t=this.config.captions.active);var n=this.storage.get("language")||this.config.captions.language;if("auto"===n){var i=(navigator.language||navigator.userLanguage).split("-");n=Kr(i,1)[0]}if(ro.setLanguage.call(this,n,t),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";Xr.on(this.media.textTracks,r,ro.update.bind(this))}setTimeout(ro.update.bind(this),0)}},update:function(){var e=this,t=ro.getTracks.call(this,!0),n=this.captions,i=n.language,r=n.meta;this.isHTML5&&this.isVideo&&t.filter(function(e){return!r.get(e)}).forEach(function(t){e.debug.log("Track added",t),r.set(t,{default:"showing"===t.mode}),t.mode="hidden",Xr.on(t,"cuechange",function(){return ro.updateCues.call(e)})});var o=!t.find(function(t){return t===e.captions.currentTrackNode}),a=this.language!==i&&t.find(function(e){return e.language===i});(o||a)&&ro.setLanguage.call(this,i,this.config.captions.active),Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this)},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=ro.getTracks.call(this);if(-1!==e)if(Xr.is.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var r=ro.getCurrentTrack.call(this),o=(r||{}).language;this.captions.currentTrackNode=r,t&&(this.captions.language=o),this.isVimeo&&this.embed.enableTextTrack(o),Xr.dispatchEvent.call(this,this.media,"languagechange")}this.isHTML5&&this.isVideo&&ro.updateCues.call(this),n&&this.toggleCaptions(!0)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else this.toggleCaptions(!1)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(Xr.is.string(e)){this.captions.language=e.toLowerCase();var n=ro.getTracks.call(this),i=ro.getCurrentTrack.call(this,!0);ro.set.call(this,n.indexOf(i),!1,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)})},getCurrentTrack:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=ro.getTracks.call(this),i=function(t){return Number((e.captions.meta.get(t)||{}).default)},r=Array.from(n).sort(function(e,t){return i(t)-i(e)});return!t&&n[this.currentTrack]||r.find(function(t){return t.language===e.captions.language})||r[0]},getLabel:function(e){var t=e;return!Xr.is.track(t)&&Zr.textTracks&&this.captions.active&&(t=ro.getCurrentTrack.call(this)),Xr.is.track(t)?Xr.is.empty(t.label)?Xr.is.empty(t.language)?to("enabled",this.config):e.language.toUpperCase():t.label:to("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions))if(Xr.is.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=ro.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Xr.getHTML)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){Xr.emptyElement(this.elements.captions);var r=Xr.createElement("span",Xr.getAttributesFromSelector(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),Xr.dispatchEvent.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},oo=function(){},ao=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];zr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Gr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):oo}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):oo}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):oo}}]),e}(),so={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"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",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",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:{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,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","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"]',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",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",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:""}},lo=Xr.getBrowser();function co(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),lo.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function uo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),co.call(this)}var fo=function(){function e(t){var n=this;zr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Xr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){co.call(n)}),Xr.on(this.player.elements.container,"dblclick",function(e){Xr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Gr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(lo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():uo.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(lo.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else uo.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[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return lo.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(Xr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Xr.is.function(document[t+"ExitFullscreen"])&&!Xr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),ho=Xr.getBrowser(),po={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void po.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(io.inject.call(this),this.listeners.controls()),po.toggleNativeControls.call(this),this.isHTML5&&ro.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,io.updateVolume.call(this),io.timeUpdate.call(this),po.checkPlaying.call(this),Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Zr.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Zr.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,ho.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,"ready")},0),po.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&po.setPoster.call(this,this.poster),this.config.duration&&io.durationUpdate.call(this)},setTitle:function(){var e=to("play",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Xr.getElement.call(this,"iframe");if(!Xr.is.element(t))return;var n=Xr.is.empty(this.config.title)?"video":this.config.title,i=to("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!Xr.is.element(this.elements.poster))return Promise.reject();var n=Xr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),po.togglePoster.call(t,!0),e});return n.catch(function(){return po.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Xr.toggleState(this.elements.buttons.play,this.playing),Xr.is.event(e)&&"timeupdate"===e.type||po.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(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),po.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},go=Xr.getBrowser(),mo=function(){function e(t){zr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Gr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&o!==this.player.elements.inputs.seek&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){io.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Xr.toggleListener(document.body,"click",this.toggleMenu,e),Xr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Xr.on(this.player.elements.container,"focusout",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Xr.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(po.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(Xr.on(this.player.media,"timeupdate seeking seeked",function(t){return io.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return io.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,"loadeddata",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Xr.on(this.player.media,"progress playing seeking seeked",function(t){return io.updateProgress.call(e.player,t)}),Xr.on(this.player.media,"volumechange",function(t){return io.updateVolume.call(e.player,t)}),Xr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return po.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,"waiting canplay seeked playing",function(t){return po.checkLoading.call(e.player,t)}),Xr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Xr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,"ratechange",function(){io.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Xr.on(this.player.media,"qualitychange",function(t){io.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Xr.on(this.player.media,"languagechange",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,"captionsenabled captionsdisabled",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n=t.detail,i=void 0===n?{}:n;"error"===t.type&&(i=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=go.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Xr.is.function(r)&&(o=r.call(e.player,t)),o&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Xr.is.function(s);Xr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){io.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";io.showTab.call(e.player,t)};if(Xr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.currentTrack=Number(t.target.value),i()},"language");else if(Xr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Xr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;io.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),i(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=t.keyCode?t.keyCode:t.which,r=t.type;if("keydown"!==r&&"keyup"!==r||39===i||37===i){var o=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(t.type);o&&a?(n.removeAttribute("play-on-seeked"),e.player.play()):!a&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");Xr.is.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,io.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),go.isWebkit&&i(Xr.getElements.call(this.player,'input[type="range"]'),"input",function(t){io.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return io.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Xr.toggleClass(r.controls,i.classNames.noTransition,"focusin"===t.type),po.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){Xr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function yo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var vo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),vo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?vo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.sdk).then(function(){vo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Xr.buildUrlParams(n),r=t.media.getAttribute("src");Xr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Xr.parseVimeoId(r),a=Xr.createElement("iframe"),s=Xr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=Xr.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Xr.replaceElement(l,t.media),Xr.fetch(Xr.format(t.config.urls.vimeo.api,o),"json").then(function(e){if(!Xr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",po.setPoster.call(t,n.href)}}),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 yo.call(t,!0),t.embed.play()},t.media.pause=function(){return yo.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,Xr.dispatchEvent.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,Xr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&io.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return d},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){d=n,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);vo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,po.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,ro.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return Xr.stripHTML(e.text)});ro.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){yo.call(t,!e),e||Xr.dispatchEvent.call(t,t.media,"playing")}),Xr.is.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){yo.call(t,!0),Xr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){yo.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return po.build.call(t)},0)}};function bo(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function wo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var Eo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Eo.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?Eo.ready.call(this):(Xr.loadScript(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(){Eo.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void po.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r=Xr.format(this.config.urls.youtube.api,e,i);Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,po.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Xr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement("div",{id:r});e.media=Xr.replaceElement(o,e.media);var a=function(e){return"https://img.youtube.com/vi/"+i+"/"+e+"default.jpg"};Xr.loadImage(a("maxres"),121).catch(function(){return Xr.loadImage(a("sd"),121)}).catch(function(){return Xr.loadImage(a("hq"))}).then(function(t){return po.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Eo.getTitle.call(e,i),e.media.play=function(){wo.call(e,!0),n.playVideo()},e.media.pause=function(){wo.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.mute(),e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return bo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(bo(i)),Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Xr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Xr.dispatchEvent.call(e,e.media,"timeupdate"),Xr.dispatchEvent.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)&&Xr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return po.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Xr.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:Xr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,"progress");break;case 0:wo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Xr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(wo.call(e,!0),Xr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Xr.dispatchEvent.call(e,e.media,"durationchange")),io.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Xr.is.empty(n)?n:Xr.dedupe(n.map(function(e){return bo(e)})))));break;case 2:e.muted||e.embed.unMute(),wo.call(e,!1)}Xr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},ko={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Xr.createElement("div",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper),this.elements.poster=Xr.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":Eo.setup.call(this);break;case"vimeo":vo.setup.call(this)}else this.isHTML5&&eo.extend.call(this);else this.debug.warn("No media element found!")}},To=function(){function e(t){var n=this;zr(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 Gr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(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=Xr.createElement("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=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=to("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Xr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Xr.is.element(n)){var i=100/t.player.duration*e,r=Xr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Xr.dispatchEvent.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=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Xr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.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=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Xr.is.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: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Xr.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Xr.buildUrlParams(e)}}]),e}(),So={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&"sources"in e&&e.sources.length?(eo.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Jr.html5:e.sources[0].provider,t.supported=Zr.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Xr.createElement("video");break;case"html5:audio":t.media=Xr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Xr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),Xr.is.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","")),po.addStyleHook.call(t),t.isHTML5&&So.insertElements.call(t,"source",e.sources),t.config.title=e.title,ko.setup.call(t),t.isHTML5&&("tracks"in e&&So.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&po.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Ao=function(){function e(t,n){var i=this;if(zr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Zr.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},so,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new ao(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Zr),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Zr.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,l=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),Xr.is.element(a)){if(s=a.getAttribute("src"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className="",l=Xr.getUrlParams(s),!Xr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Jr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=$r.video;break;case"video":case"audio":this.type=o,this.provider=Jr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("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=Zr.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new mo(this),this.storage=new Qr(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement("div"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),po.addStyleHook.call(this),ko.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&po.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new fo(this),this.ads=new To(this),this.config.autoplay&&this.play()):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 Gr(e,[{key:"play",value:function(){return Xr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):Xr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Xr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);Xr.toggleState(this.elements.buttons.captions,t),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,Xr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Zr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Xr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)&&io.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Xr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Xr.off(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&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),po.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Zr.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Jr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Jr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Jr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===$r.video)}},{key:"isAudio",get:function(){return Boolean(this.type===$r.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=Xr.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Xr.is.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||0;return e||t}},{key:"volume",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get("volume")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Xr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get("muted")),Xr.is.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;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get("speed")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Xr.is.empty(e)||(t=Number(e)),Xr.is.number(t)||(t=this.storage.get("quality")),Xr.is.number(t)||(t=this.config.quality.selected),Xr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Xr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Xr.is.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){So.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?po.setPoster.call(this,e):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=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){ro.set.call(this,e)},get:function(){var e=this.captions,t=e.active,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){ro.setLanguage.call(this,e)},get:function(){return(ro.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Zr.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Zr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Zr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Xr.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Xr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Xr.is.nodeList(t)?i=Array.from(t):Xr.is.array(t)&&(i=t.filter(Xr.is.element)),Xr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return Ao.defaults=Xr.cloneDeep(so),Ao});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 281f56ca..1f05ba87 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","responseType","request","XMLHttpRequest","responseText","response","statusText","send","minWidth","image","Image","naturalWidth","hasId","exists","getElementById","update","container","innerHTML","insertAdjacentElement","useStorage","toggleHidden","setAttribute","cached","prefix","content","fetch","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","text","setAttributes","innerText","removeElement","childNodes","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","force","classList","contains","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","i18n","getDeep","seekTime","title","controls","cors","iconUrl","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","_ref$badge","checked","_ref$checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","createMenuItem","getLabel","createBadge","getBadge","updateSetting","pane","currentTrack","default","tracks","getTracks","track","_this4","active","language","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","_ref3","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","userLanguage","setLanguage","trackEvents","_captions","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","getCurrentTrack","embed","enableTextTrack","toggleCaptions","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","caption","noop","Console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","eventType","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","Player","autopause","disableTextTrack","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","_ref$cues","stripHTML","getPaused","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","insertElement","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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CD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,wBAEL,UACA,UACA,SACD,SACA,SACA,wBAOA,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,+BACF,+BACE,mCAEF,2BACA,0BACD,+BAEI,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC1YfnN,GAAU/J,GAAMgK,aAEtB,SAASmN,QACA98C,KAAKqlC,aAKJ8O,EAASn0C,KAAKolC,OAAOsD,SAASyJ,QAAQU,WACxClN,GAAM9oC,GAAG+rC,QAAQuL,OACX5H,YAAY4H,EAAQn0C,KAAKu4C,WAI7BjM,cAAc9uC,KAAKwC,KAAKolC,OAAQplC,KAAKyB,OAAQzB,KAAKu4C,OAAS,kBAAoB,kBAAkB,GAGlG7I,GAAQqN,UACHC,UAAUx/C,KAAK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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(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', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\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 } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\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) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\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) { items.push([name, value]); });\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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 // 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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\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 },\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 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\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 _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\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","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.11/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.11\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","responseType","request","XMLHttpRequest","responseText","response","statusText","send","minWidth","image","Image","naturalWidth","hasId","exists","getElementById","update","container","innerHTML","insertAdjacentElement","useStorage","toggleHidden","setAttribute","cached","prefix","content","fetch","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","text","setAttributes","innerText","removeElement","childNodes","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","force","classList","contains","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","i18n","getDeep","seekTime","title","controls","cors","iconUrl","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","_ref$badge","checked","_ref$checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","createMenuItem","getLabel","createBadge","getBadge","updateSetting","pane","currentTrack","default","tracks","getTracks","track","_this4","active","language","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","_ref3","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","userLanguage","setLanguage","trackEvents","_captions","mode","updateCues","trackRemoved","currentTrackNode","firstMatch","getCurrentTrack","embed","enableTextTrack","toggleCaptions","fromLanguage","sortIsDefault","sorted","cues","activeCues","cue","getCueAsHTML","getHTML","cueText","caption","noop","Console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","eventType","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","Player","autopause","disableTextTrack","restorePause","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","_ref$cues","stripHTML","getPaused","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","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","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","insertElement","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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CD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,wBAEL,UACA,UACA,SACD,SACA,SACA,wBAOA,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,+BACF,+BACE,mCAEF,2BACA,0BACD,+BAEI,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC1YfnN,GAAU/J,GAAMgK,aAEtB,SAASmN,QACA98C,KAAKqlC,aAKJ8O,EAASn0C,KAAKolC,OAAOsD,SAASyJ,QAAQU,WACxClN,GAAM9oC,GAAG+rC,QAAQuL,OACX5H,YAAY4H,EAAQn0C,KAAKu4C,WAI7BjM,cAAc9uC,KAAKwC,KAAKolC,OAAQplC,KAAKyB,OAAQzB,KAAKu4C,OAAS,kBAAoB,kBAAkB,GAGlG7I,GAAQqN,UACHC,UAAUx/C,KAAK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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(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', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\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 } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\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) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\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) { items.push([name, value]); });\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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 // 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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\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 },\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 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\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 _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\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","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n 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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // 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: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(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// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n 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 (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return utils.getConstructor(input) === Object;\n },\n number(input) {\n return utils.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return utils.getConstructor(input) === String;\n },\n boolean(input) {\n return utils.getConstructor(input) === Boolean;\n },\n function(input) {\n return utils.getConstructor(input) === Function;\n },\n array(input) {\n return !utils.is.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return utils.is.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return utils.is.instanceof(input, NodeList);\n },\n element(input) {\n return utils.is.instanceof(input, Element);\n },\n textNode(input) {\n return utils.getConstructor(input) === Text;\n },\n event(input) {\n return utils.is.instanceof(input, Event);\n },\n cue(input) {\n return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue);\n },\n track(input) {\n return utils.is.instanceof(input, TextTrack) || (!utils.is.nullOrUndefined(input) && utils.is.string(input.kind));\n },\n url(input) {\n return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n utils.is.nullOrUndefined(input) ||\n ((utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length) ||\n (utils.is.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n },\n\n getConstructor(input) {\n return !utils.is.nullOrUndefined(input) ? input.constructor : null;\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load 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 loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n 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 utils.toggleHidden(container, true);\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 utils\n .fetch(url)\n .then(result => {\n if (utils.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 // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('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\n toggleClass(element, className, force) {\n if (utils.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 null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\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 elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.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 // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return utils.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 = utils.getHours(time);\n const mins = utils.getMinutes(time);\n const secs = utils.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n 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\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = utils.parseUrl(input));\n }\n\n if (utils.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Like outerHTML, but also works for DocumentFragment\n getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\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\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.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 utils.removeElement(html5.getSources());\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// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\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 and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // 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 utils.setAttributes(\n icon,\n utils.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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\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 {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\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 = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem({value, list, type, title, badge = null, checked = false}) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, 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 (utils.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 (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n 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 = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\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 !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.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 (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n 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 (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n 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 there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n 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 toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 // Empty the menu\n utils.emptyElement(list);\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 // 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 (utils.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 utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.currentTrack;\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.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 break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n 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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\n\n // Empty the menu\n utils.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 (!tracks.length) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.active && 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.active,\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.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 utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // 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 (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.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 (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\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 (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Get language from storage, fallback to config\n let language = this.storage.get('language') || this.config.captions.language;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n // Set language and show if active\n captions.setLanguage.call(this, language, active);\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 utils.on(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() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { language, meta } = this.captions;\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .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 utils.on(track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n const trackRemoved = !tracks.find(track => track === this.captions.currentTrackNode);\n const firstMatch = this.language !== language && tracks.find(track => track.language === language);\n\n // Update language if removed or first matching track added\n if (trackRemoved || firstMatch) {\n captions.setLanguage.call(this, language, this.config.captions.active);\n }\n\n // Enable or disable captions based on track length\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.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 set(index, setLanguage = true, show = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n this.toggleCaptions(false);\n return;\n }\n\n if (!utils.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 = captions.getCurrentTrack.call(this);\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Prevent setting language in some cases, since it can violate user's intentions\n if (setLanguage) {\n this.captions.language = language;\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\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 // Show captions\n if (show) {\n this.toggleCaptions(true);\n }\n },\n\n setLanguage(language, show = true) {\n if (!utils.is.string(language)) {\n this.debug.warn('Invalid language argument', language);\n return;\n }\n // Normalize\n this.captions.language = language.toLowerCase();\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.getCurrentTrack.call(this, true);\n captions.set.call(this, tracks.indexOf(track), false, show);\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 => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack(fromLanguage = 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 return (!fromLanguage && tracks[this.currentTrack]) || sorted.find(track => track.language === this.captions.language) || sorted[0];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 (!utils.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 (!utils.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(utils.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 utils.emptyElement(this.elements.captions);\n const caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // 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.3.12/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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: '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 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\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 played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n 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 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: '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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n '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 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 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 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// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n 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 utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.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 !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.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 utils.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 ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}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 (!utils.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// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n 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 (!utils.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 utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\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 (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n 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 utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\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 // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.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 = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.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 // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && (\n focused !== this.player.elements.inputs.seek &&\n utils.matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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 = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.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 utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let {detail = {}} = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.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 (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.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 const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\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 ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\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 = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.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 // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.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);\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 utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\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([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => utils.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 utils.dispatchEvent.call(player, player.media, 'playing');\n }\n });\n\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // 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 utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\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 utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.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 (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\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 utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.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\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n 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, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\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 volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n 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 utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.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 utils.dispatchEvent.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 utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\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 utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.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 i18n from '../i18n';\nimport utils from '../utils';\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 this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\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 (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\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: 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}?${utils.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 = utils.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(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = 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 = utils.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 // 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 (!utils.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 (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.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 utils.dispatchEvent.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 (utils.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 (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.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 (!utils.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 (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n 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 utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.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', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.12\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\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 { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\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 (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n 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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -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 (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n 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 let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.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(params.playsinline);\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 (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.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 // 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 (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // 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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\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 get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\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 (!utils.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 || !utils.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 = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.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 - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.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 (utils.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 before the media has loaded\n const duration = (this.media || {}).duration || 0;\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 (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.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 + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return 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 (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return 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 let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return 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 * 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);\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 = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\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);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { active, currentTrack } = this.captions;\n return active ? 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);\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 const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // 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 = utils.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 = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\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 utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n 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 utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // 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 // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\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\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(utils.is.element);\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/package.json b/package.json
index 1cf27323..23a7b632 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "plyr",
- "version": "3.3.11",
+ "version": "3.3.12",
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
"homepage": "https://plyr.io",
"main": "./dist/plyr.js",
diff --git a/readme.md b/readme.md
index e0025d0a..6ffe8bc0 100644
--- a/readme.md
+++ b/readme.md
@@ -132,13 +132,13 @@ See [initialising](#initialising) for more information on advanced setups.
You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build.
```html
-<script src="https://cdn.plyr.io/3.3.11/plyr.js"></script>
+<script src="https://cdn.plyr.io/3.3.12/plyr.js"></script>
```
...or...
```html
-<script src="https://cdn.plyr.io/3.3.11/plyr.polyfilled.js"></script>
+<script src="https://cdn.plyr.io/3.3.12/plyr.polyfilled.js"></script>
```
### CSS
@@ -152,13 +152,13 @@ Include the `plyr.css` stylsheet into your `<head>`
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
```html
-<link rel="stylesheet" href="https://cdn.plyr.io/3.3.11/plyr.css">
+<link rel="stylesheet" href="https://cdn.plyr.io/3.3.12/plyr.css">
```
### SVG Sprite
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
-reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.11/plyr.svg`.
+reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.12/plyr.svg`.
## Ads
diff --git a/src/js/defaults.js b/src/js/defaults.js
index ff207017..1789b026 100644
--- a/src/js/defaults.js
+++ b/src/js/defaults.js
@@ -56,7 +56,7 @@ const defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.11/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 752b3d3c..0786334d 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v3.3.11
+// plyr.js v3.3.12
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/src/js/plyr.polyfilled.js b/src/js/plyr.polyfilled.js
index 852630ac..2c19ae1d 100644
--- a/src/js/plyr.polyfilled.js
+++ b/src/js/plyr.polyfilled.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.3.11
+// plyr.js v3.3.12
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================