aboutsummaryrefslogtreecommitdiffstats
path: root/dist/plyr.polyfilled.js.map
blob: b44b2832082cd86ae26a5bfaeaded819e16437b7 (plain)
1
{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_string-ws.js","node_modules/core-js/modules/_string-trim.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/es6.number.constructor.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.number.is-nan.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","node_modules/core-js/modules/es6.regexp.constructor.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.sign.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["global","this","aFunction","isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","core","ctx","redefine","defined","uid","Iterators","toInteger","$defineProperty","cof","ITERATOR","classof","$export","toObject","getIterFn","isArrayIter","createProperty","call","toLength","isArray","speciesConstructor","asc","IObject","ArrayProto","toIObject","pIE","min","toAbsoluteIndex","$keys","spaces","fails","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","gOPD","require$$3","require$$4","inheritIfRequired","require$$5","require$$6","isRegExp","MATCH","context","wks","DESCRIPTORS","$flags","TAG","create","descriptor","setToStringTag","$iterCreate","getPrototypeOf","step","addToUnscopables","proto","key","$iterators","gOPS","createArrayMethod","id","anInstance","forOf","redefineAll","validate","$has","meta","$iterDetect","weak","assign","SPECIES","invoke","cel","html","process","Promise","navigator","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","userAgent","perform","promiseResolve","LIBRARY","require$$7","getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","plyr","dispatchEvent","unbindListeners","item","ready","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","storage","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","gOPN","Base","i","generateId","prefix","floor","random","format","toString","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","Storage","enabled","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","inner","home","backButton","inject","props","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","urls","vimeo","sdk","iframe","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","NAME","define","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  try {\n    var ce = new window.CustomEvent('test', { cancelable: true });\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n      // IE has problems with .preventDefault() on custom events\n      // http://stackoverflow.com/questions/23349191\n      throw new Error('Could not prevent default');\n    }\n  } catch (e) {\n    var CustomEvent = function(event, params) {\n      var evt, origPrevent;\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(\n        event,\n        params.bubbles,\n        params.cancelable,\n        params.detail\n      );\n      origPrevent = evt.preventDefault;\n      evt.preventDefault = function() {\n        origPrevent.call(this);\n        try {\n          Object.defineProperty(this, 'defaultPrevented', {\n            get: function() {\n              return true;\n            }\n          });\n        } catch (e) {\n          this.defaultPrevented = true;\n        }\n      };\n      return evt;\n    };\n\n    CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = CustomEvent; // expose definition to window\n  }\n})();\n","(function(global) {\r\n  /**\r\n   * Polyfill URLSearchParams\r\n   *\r\n   * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n   */\r\n\r\n  var checkIfIteratorIsSupported = function() {\r\n    try {\r\n      return !!Symbol.iterator;\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n  var createIterator = function(items) {\r\n    var iterator = {\r\n      next: function() {\r\n        var value = items.shift();\r\n        return { done: value === void 0, value: value };\r\n      }\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      iterator[Symbol.iterator] = function() {\r\n        return iterator;\r\n      };\r\n    }\r\n\r\n    return iterator;\r\n  };\r\n\r\n  /**\r\n   * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n   * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n   */\r\n  var serializeParam = function(value) {\r\n    return encodeURIComponent(value).replace(/%20/g, '+');\r\n  };\r\n\r\n  var deserializeParam = function(value) {\r\n    return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n  };\r\n\r\n  var polyfillURLSearchParams = function() {\r\n\r\n    var URLSearchParams = function(searchString) {\r\n      Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n\r\n      if (typeof searchString === 'string') {\r\n        if (searchString !== '') {\r\n          this._fromString(searchString);\r\n        }\r\n      } else if (searchString instanceof URLSearchParams) {\r\n        var _this = this;\r\n        searchString.forEach(function(value, name) {\r\n          _this.append(name, value);\r\n        });\r\n      }\r\n    };\r\n\r\n    var proto = URLSearchParams.prototype;\r\n\r\n    proto.append = function(name, value) {\r\n      if (name in this._entries) {\r\n        this._entries[name].push(value.toString());\r\n      } else {\r\n        this._entries[name] = [value.toString()];\r\n      }\r\n    };\r\n\r\n    proto.delete = function(name) {\r\n      delete this._entries[name];\r\n    };\r\n\r\n    proto.get = function(name) {\r\n      return (name in this._entries) ? this._entries[name][0] : null;\r\n    };\r\n\r\n    proto.getAll = function(name) {\r\n      return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n    };\r\n\r\n    proto.has = function(name) {\r\n      return (name in this._entries);\r\n    };\r\n\r\n    proto.set = function(name, value) {\r\n      this._entries[name] = [value.toString()];\r\n    };\r\n\r\n    proto.forEach = function(callback, thisArg) {\r\n      var entries;\r\n      for (var name in this._entries) {\r\n        if (this._entries.hasOwnProperty(name)) {\r\n          entries = this._entries[name];\r\n          for (var i = 0; i < entries.length; i++) {\r\n            callback.call(thisArg, entries[i], name, this);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    proto.keys = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push(name);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.values = function() {\r\n      var items = [];\r\n      this.forEach(function(value) {\r\n        items.push(value);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.entries = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      proto[Symbol.iterator] = proto.entries;\r\n    }\r\n\r\n    proto.toString = function() {\r\n      var searchArray = [];\r\n      this.forEach(function(value, name) {\r\n        searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n      });\r\n      return searchArray.join('&');\r\n    };\r\n\r\n    Object.defineProperty(proto, '_fromString', {\r\n      enumerable: false,\r\n      configurable: false,\r\n      writable: false,\r\n      value: function(searchString) {\r\n        this._entries = {};\r\n        searchString = searchString.replace(/^\\?/, '');\r\n        var attributes = searchString.split('&');\r\n        var attribute;\r\n        for (var i = 0; i < attributes.length; i++) {\r\n          attribute = attributes[i].split('=');\r\n          this.append(\r\n            deserializeParam(attribute[0]),\r\n            (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n          );\r\n        }\r\n      }\r\n    });\r\n\r\n    global.URLSearchParams = URLSearchParams;\r\n  };\r\n\r\n  if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n    polyfillURLSearchParams();\r\n  }\r\n\r\n  if (typeof URLSearchParams.prototype.sort !== 'function') {\r\n    URLSearchParams.prototype.sort = function() {\r\n      var _this = this;\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n        if (!_this._entries) {\r\n          _this.delete(name);\r\n        }\r\n      });\r\n      items.sort(function(a, b) {\r\n        if (a[0] < b[0]) {\r\n          return -1;\r\n        } else if (a[0] > b[0]) {\r\n          return +1;\r\n        } else {\r\n          return 0;\r\n        }\r\n      });\r\n      if (_this._entries) { // force reset because IE keeps keys index\r\n        _this._entries = {};\r\n      }\r\n      for (var i = 0; i < items.length; i++) {\r\n        this.append(items[i][0], items[i][1]);\r\n      }\r\n    };\r\n  }\r\n\r\n  // HTMLAnchorElement\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n  /**\r\n   * Polyfill URL\r\n   *\r\n   * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n   */\r\n\r\n  var checkIfURLIsSupported = function() {\r\n    try {\r\n      var u = new URL('b', 'http://a');\r\n      u.pathname = 'c%20d';\r\n      return (u.href === 'http://a/c%20d') && u.searchParams;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var polyfillURL = function() {\r\n    var _URL = global.URL;\r\n\r\n    var URL = function(url, base) {\r\n      if (typeof url !== 'string') url = String(url);\r\n\r\n      // Only create another document if the base is different from current location.\r\n      var doc = document, baseElement;\r\n      if (base && (global.location === void 0 || base !== global.location.href)) {\r\n        doc = document.implementation.createHTMLDocument('');\r\n        baseElement = doc.createElement('base');\r\n        baseElement.href = base;\r\n        doc.head.appendChild(baseElement);\r\n        try {\r\n          if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n        } catch (err) {\r\n          throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n        }\r\n      }\r\n\r\n      var anchorElement = doc.createElement('a');\r\n      anchorElement.href = url;\r\n      if (baseElement) {\r\n        doc.body.appendChild(anchorElement);\r\n        anchorElement.href = anchorElement.href; // force href to refresh\r\n      }\r\n\r\n      if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n        throw new TypeError('Invalid URL');\r\n      }\r\n\r\n      Object.defineProperty(this, '_anchorElement', {\r\n        value: anchorElement\r\n      });\r\n\r\n\r\n      // create a linked searchParams which reflect its changes on URL\r\n      var searchParams = new URLSearchParams(this.search);\r\n      var enableSearchUpdate = true;\r\n      var enableSearchParamsUpdate = true;\r\n      var _this = this;\r\n      ['append', 'delete', 'set'].forEach(function(methodName) {\r\n        var method = searchParams[methodName];\r\n        searchParams[methodName] = function() {\r\n          method.apply(searchParams, arguments);\r\n          if (enableSearchUpdate) {\r\n            enableSearchParamsUpdate = false;\r\n            _this.search = searchParams.toString();\r\n            enableSearchParamsUpdate = true;\r\n          }\r\n        };\r\n      });\r\n\r\n      Object.defineProperty(this, 'searchParams', {\r\n        value: searchParams,\r\n        enumerable: true\r\n      });\r\n\r\n      var search = void 0;\r\n      Object.defineProperty(this, '_updateSearchParams', {\r\n        enumerable: false,\r\n        configurable: false,\r\n        writable: false,\r\n        value: function() {\r\n          if (this.search !== search) {\r\n            search = this.search;\r\n            if (enableSearchParamsUpdate) {\r\n              enableSearchUpdate = false;\r\n              this.searchParams._fromString(this.search);\r\n              enableSearchUpdate = true;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    };\r\n\r\n    var proto = URL.prototype;\r\n\r\n    var linkURLWithAnchorAttribute = function(attributeName) {\r\n      Object.defineProperty(proto, attributeName, {\r\n        get: function() {\r\n          return this._anchorElement[attributeName];\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement[attributeName] = value;\r\n        },\r\n        enumerable: true\r\n      });\r\n    };\r\n\r\n    ['hash', 'host', 'hostname', 'port', 'protocol']\r\n      .forEach(function(attributeName) {\r\n        linkURLWithAnchorAttribute(attributeName);\r\n      });\r\n\r\n    Object.defineProperty(proto, 'search', {\r\n      get: function() {\r\n        return this._anchorElement['search'];\r\n      },\r\n      set: function(value) {\r\n        this._anchorElement['search'] = value;\r\n        this._updateSearchParams();\r\n      },\r\n      enumerable: true\r\n    });\r\n\r\n    Object.defineProperties(proto, {\r\n\r\n      'toString': {\r\n        get: function() {\r\n          var _this = this;\r\n          return function() {\r\n            return _this.href;\r\n          };\r\n        }\r\n      },\r\n\r\n      'href': {\r\n        get: function() {\r\n          return this._anchorElement.href.replace(/\\?$/, '');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.href = value;\r\n          this._updateSearchParams();\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'pathname': {\r\n        get: function() {\r\n          return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.pathname = value;\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'origin': {\r\n        get: function() {\r\n          // get expected port from protocol\r\n          var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n          // add port to origin if, expected port is different than actual port\r\n          // and it is not empty f.e http://foo:8080\r\n          // 8080 != 80 && 8080 != ''\r\n          var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n            this._anchorElement.port !== '';\r\n\r\n          return this._anchorElement.protocol +\r\n            '//' +\r\n            this._anchorElement.hostname +\r\n            (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'password': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'username': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n    });\r\n\r\n    URL.createObjectURL = function(blob) {\r\n      return _URL.createObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    URL.revokeObjectURL = function(url) {\r\n      return _URL.revokeObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    global.URL = URL;\r\n\r\n  };\r\n\r\n  if (!checkIfURLIsSupported()) {\r\n    polyfillURL();\r\n  }\r\n\r\n  if ((global.location !== void 0) && !('origin' in global.location)) {\r\n    var getOrigin = function() {\r\n      return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n    };\r\n\r\n    try {\r\n      Object.defineProperty(global.location, 'origin', {\r\n        get: getOrigin,\r\n        enumerable: true\r\n      });\r\n    } catch (e) {\r\n      setInterval(function() {\r\n        global.location.origin = getOrigin();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","module.exports = {};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","exports.f = {}.propertyIsEnumerable;\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, false);\n  if (typeof it == 'string' && it.length > 2) {\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0);\n    var third, radix, maxCode;\n    if (first === 43 || first === 45) {\n      third = it.charCodeAt(2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (it.charCodeAt(1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default: return +it;\n      }\n      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n  $Number = function Number(value) {\n    var it = arguments.length < 1 ? 0 : value;\n    var that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for (var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (has(Base, key = keys[j]) && !has($Number, key)) {\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n  var fns = exec(defined, SYMBOL, ''[KEY]);\n  var strfn = fns[0];\n  var rxfn = fns[1];\n  if (fails(function () {\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  })) {\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n  define(function toString() {\n    var R = anObject(this);\n    return '/'.concat(R.source, '/',\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n  });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n  define(function toString() {\n    return $toString.call(this);\n  });\n}\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n  'use strict';\n  var isRegExp = require('./_is-regexp');\n  var _split = $split;\n  var $push = [].push;\n  var $SPLIT = 'split';\n  var LENGTH = 'length';\n  var LAST_INDEX = 'lastIndex';\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while (match = separatorCopy.exec(string)) {\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          // eslint-disable-next-line no-loop-func\n          if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n          });\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    $split = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit) {\n    var O = defined(this);\n    var fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue) {\n    'use strict';\n    var O = defined(this);\n    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n    isNullOrUndefined(input) ||\n    ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n    (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n    // Accept a URL object\n    if (instanceOf(input, window.URL)) {\n        return true;\n    }\n\n    // Add the protocol if required\n    let string = input;\n    if (!input.startsWith('http://') || !input.startsWith('https://')) {\n        string = `http://${input}`;\n    }\n\n    try {\n        return !isEmpty(new URL(string).hostname);\n    } catch (e) {\n        return false;\n    }\n};\n\nexport default {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    weakMap: isWeakMap,\n    nodeList: isNodeList,\n    element: isElement,\n    textNode: isTextNode,\n    event: isEvent,\n    keyboardEvent: isKeyboardEvent,\n    cue: isCue,\n    track: isTrack,\n    url: isUrl,\n    empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n    // Test via a getter in the options object to see if the passive property is accessed\n    let supported = false;\n    try {\n        const options = Object.defineProperty({}, 'passive', {\n            get() {\n                supported = true;\n                return null;\n            },\n        });\n        window.addEventListener('test', null, options);\n        window.removeEventListener('test', null, options);\n    } catch (e) {\n        // Do nothing\n    }\n\n    return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n    // Bail if no element, event, or callback\n    if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n        return;\n    }\n\n    // Allow multiple events\n    const events = event.split(' ');\n\n    // Build options\n    // Default to just the capture boolean for browsers with no passive listener support\n    let options = capture;\n\n    // If passive events listeners are supported\n    if (supportsPassiveListeners) {\n        options = {\n            // Whether the listener can be passive (i.e. default never prevented)\n            passive,\n            // Whether the listener is a capturing listener or not\n            capture,\n        };\n    }\n\n    // If a single node is passed, bind the event listener\n    events.forEach(type => {\n        if (this && this.eventListeners && toggle) {\n            // Cache event listener\n            this.eventListeners.push({ element, type, callback, options });\n        }\n\n        element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n    });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n    function onceCallback(...args) {\n        off(element, events, onceCallback, passive, capture);\n        callback.apply(this, args);\n    }\n\n    toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n    // Bail if no element\n    if (!is.element(element) || is.empty(type)) {\n        return;\n    }\n\n    // Create and dispatch the event\n    const event = new CustomEvent(type, {\n        bubbles,\n        detail: Object.assign({}, detail, {\n            plyr: this,\n        }),\n    });\n\n    // Dispatch the event\n    element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n    if (this && this.eventListeners) {\n        this.eventListeners.forEach(item => {\n            const { element, type, callback, options } = item;\n            element.removeEventListener(type, callback, options);\n        });\n\n        this.eventListeners = [];\n    }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n    return new Promise(\n        resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n    ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n    // Convert `elements` to an array, if necessary.\n    const targets = elements.length ? elements : [elements];\n\n    // Loops backwards to prevent having to clone the wrapper on the\n    // first element (see `child` below).\n    Array.from(targets)\n        .reverse()\n        .forEach((element, index) => {\n            const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n            // Cache the current parent and sibling.\n            const parent = element.parentNode;\n            const sibling = element.nextSibling;\n\n            // Wrap the element (is automatically removed from its current\n            // parent).\n            child.appendChild(element);\n\n            // If the element had a sibling, insert the wrapper before\n            // the sibling to maintain the HTML structure; otherwise, just\n            // append it to the parent.\n            if (sibling) {\n                parent.insertBefore(child, sibling);\n            } else {\n                parent.appendChild(child);\n            }\n        });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n    if (!is.element(element) || is.empty(attributes)) {\n        return;\n    }\n\n    // Assume null and undefined attributes should be left out,\n    // Setting them would otherwise convert them to \"null\" and \"undefined\"\n    Object.entries(attributes)\n        .filter(([, value]) => !is.nullOrUndefined(value))\n        .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n    // Create a new <element>\n    const element = document.createElement(type);\n\n    // Set all passed attributes\n    if (is.object(attributes)) {\n        setAttributes(element, attributes);\n    }\n\n    // Add text node\n    if (is.string(text)) {\n        element.innerText = text;\n    }\n\n    // Return built element\n    return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n    if (!is.element(element) || !is.element(target)) {\n        return;\n    }\n\n    target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n    if (!is.element(parent)) {\n        return;\n    }\n\n    parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n    if (is.nodeList(element) || is.array(element)) {\n        Array.from(element).forEach(removeElement);\n        return;\n    }\n\n    if (!is.element(element) || !is.element(element.parentNode)) {\n        return;\n    }\n\n    element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let { length } = element.childNodes;\n\n    while (length > 0) {\n        element.removeChild(element.lastChild);\n        length -= 1;\n    }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n    if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n        return null;\n    }\n\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n\n    return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n    // For example:\n    // '.test' to { class: 'test' }\n    // '#test' to { id: 'test' }\n    // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n    if (!is.string(sel) || is.empty(sel)) {\n        return {};\n    }\n\n    const attributes = {};\n    const existing = existingAttributes;\n\n    sel.split(',').forEach(s => {\n        // Remove whitespace\n        const selector = s.trim();\n        const className = selector.replace('.', '');\n        const stripped = selector.replace(/[[\\]]/g, '');\n\n        // Get the parts and value\n        const parts = stripped.split('=');\n        const key = parts[0];\n        const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n        // Get the first character\n        const start = selector.charAt(0);\n\n        switch (start) {\n            case '.':\n                // Add to existing classname\n                if (is.object(existing) && is.string(existing.class)) {\n                    existing.class += ` ${className}`;\n                }\n\n                attributes.class = className;\n                break;\n\n            case '#':\n                // ID selector\n                attributes.id = selector.replace('#', '');\n                break;\n\n            case '[':\n                // Attribute selector\n                attributes[key] = value;\n\n                break;\n\n            default:\n                break;\n        }\n    });\n\n    return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let hide = hidden;\n\n    if (!is.boolean(hide)) {\n        hide = !element.hidden;\n    }\n\n    if (hide) {\n        element.setAttribute('hidden', '');\n    } else {\n        element.removeAttribute('hidden');\n    }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n    if (is.nodeList(element)) {\n        return Array.from(element).map(e => toggleClass(e, className, force));\n    }\n\n    if (is.element(element)) {\n        let method = 'toggle';\n        if (typeof force !== 'undefined') {\n            method = force ? 'add' : 'remove';\n        }\n\n        element.classList[method](className);\n        return element.classList.contains(className);\n    }\n\n    return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n    return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n    const prototype = { Element };\n\n    function match() {\n        return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    const matches =\n        prototype.matches ||\n        prototype.webkitMatchesSelector ||\n        prototype.mozMatchesSelector ||\n        prototype.msMatchesSelector ||\n        match;\n\n    return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n    return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n    return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n\n    const trap = event => {\n        // Bail if not tab key or not fullscreen\n        if (event.key !== 'Tab' || event.keyCode !== 9) {\n            return;\n        }\n\n        // Get the current focused element\n        const focused = document.activeElement;\n\n        if (focused === last && !event.shiftKey) {\n            // Move focus to first element that can be tabbed if Shift isn't used\n            first.focus();\n            event.preventDefault();\n        } else if (focused === first && event.shiftKey) {\n            // Move focus to last element that can be tabbed if Shift is used\n            last.focus();\n            event.preventDefault();\n        }\n    };\n\n    toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    // Set regular focus\n    element.focus();\n\n    // If we want to mimic keyboard focus via tab\n    if (tabFocus) {\n        toggleClass(element, this.config.classNames.tabFocus);\n    }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n    const element = document.createElement('span');\n\n    const events = {\n        WebkitTransition: 'webkitTransitionEnd',\n        MozTransition: 'transitionend',\n        OTransition: 'oTransitionEnd otransitionend',\n        transition: 'transitionend',\n    };\n\n    const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n    return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n    setTimeout(() => {\n        try {\n            toggleHidden(element, true);\n            element.offsetHeight; // eslint-disable-line\n            toggleHidden(element, false);\n        } catch (e) {\n            // Do nothing\n        }\n    }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n    isIE: /* @cc_on!@ */ false || !!document.documentMode,\n    isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n    isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n    isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n    'audio/ogg': 'vorbis',\n    'audio/wav': '1',\n    'video/webm': 'vp8, vorbis',\n    'video/mp4': 'avc1.42E01E, mp4a.40.2',\n    'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n\n    // Check for support\n    // Basic functionality vs full UI\n    check(type, provider, playsinline) {\n        const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n        const api = support[type] || provider !== 'html5';\n        const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n        return {\n            api,\n            ui,\n        };\n    },\n\n    // Picture-in-picture support\n    // Safari only currently\n    pip: (() => !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode))(),\n\n    // Airplay support\n    // Safari only currently\n    airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    playsinline: 'playsInline' in document.createElement('video'),\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    mime(inputType) {\n        const [mediaType] = inputType.split('/');\n        if (!this.isHTML5 || mediaType !== this.type) {\n            return false;\n        }\n\n        let type;\n        if (inputType && inputType.includes('codecs=')) {\n            // Use input directly\n            type = inputType;\n        } else if (inputType === 'audio/mpeg') {\n            // Skip codec\n            type = 'audio/mpeg;';\n        } else if (inputType in defaultCodecs) {\n            // Use codec\n            type = `${inputType}; codecs=\"${defaultCodecs[inputType]}\"`;\n        }\n\n        try {\n            return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n        } catch (err) {\n            return false;\n        }\n    },\n\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n\n    // <input type=\"range\"> Sliders\n    rangeInput: (() => {\n        const range = document.createElement('input');\n        range.type = 'range';\n        return range.type === 'range';\n    })(),\n\n    // Touch\n    // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n    touch: 'ontouchstart' in document.documentElement,\n\n    // Detect transitions support\n    transitions: transitionEndEvent !== false,\n\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n    getSources() {\n        if (!this.isHTML5) {\n            return [];\n        }\n\n        const sources = Array.from(this.media.querySelectorAll('source'));\n\n        // Filter out unsupported sources\n        return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n    },\n\n    // Get quality levels\n    getQualityOptions() {\n        // Get sizes from <source> elements\n        return html5.getSources\n            .call(this)\n            .map(source => Number(source.getAttribute('size')))\n            .filter(Boolean);\n    },\n\n    extend() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        const player = this;\n\n        // Quality\n        Object.defineProperty(player.media, 'quality', {\n            get() {\n                // Get sources\n                const sources = html5.getSources.call(player);\n                const source = sources.find(source => source.getAttribute('src') === player.source);\n\n                // Return size, if match is found\n                return source && Number(source.getAttribute('size'));\n            },\n            set(input) {\n                // Get sources\n                const sources = html5.getSources.call(player);\n\n                // Get first match for requested size\n                const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n                // No matching source found\n                if (!source) {\n                    return;\n                }\n\n                // Get current state\n                const { currentTime, paused, preload, readyState } = player.media;\n\n                // Set new source\n                player.media.src = source.getAttribute('src');\n\n                // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n                if (preload !== 'none' || readyState) {\n                    // Restore time\n                    player.once('loadedmetadata', () => {\n                        player.currentTime = currentTime;\n\n                        // Resume playing\n                        if (!paused) {\n                            player.play();\n                        }\n                    });\n\n                    // Load new source\n                    player.media.load();\n                }\n\n                // Trigger change event\n                triggerEvent.call(player, player.media, 'qualitychange', false, {\n                    quality: input,\n                });\n\n                // Save to storage\n                player.storage.set({ quality: input });\n            },\n        });\n    },\n\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        // Remove child sources\n        removeElement(html5.getSources.call(this));\n\n        // Set blank video src attribute\n        // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n        // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n        this.media.setAttribute('src', this.config.blankVideo);\n\n        // Load the new empty source\n        // This will cancel existing requests\n        // See https://github.com/sampotts/plyr/issues/174\n        this.media.load();\n\n        // Debugging\n        this.debug.log('Cancelled network requests');\n    },\n};\n\nexport default html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n    if (!is.array(array)) {\n        return array;\n    }\n\n    return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n    if (!is.array(array) || !array.length) {\n        return null;\n    }\n\n    return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n    return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n    return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n    if (!sources.length) {\n        return target;\n    }\n\n    const source = sources.shift();\n\n    if (!is.object(source)) {\n        return target;\n    }\n\n    Object.keys(source).forEach(key => {\n        if (is.object(source[key])) {\n            if (!Object.keys(target).includes(key)) {\n                Object.assign(target, { [key]: {} });\n            }\n\n            extend(target[key], source[key]);\n        } else {\n            Object.assign(target, { [key]: source[key] });\n        }\n    });\n\n    return extend(target, ...sources);\n}\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n  $RegExp = function RegExp(p, f) {\n    var tiRE = this instanceof $RegExp;\n    var piRE = isRegExp(p);\n    var fiU = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function (key) {\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function () { return Base[key]; },\n      set: function (it) { Base[key] = it; }\n    });\n  };\n  for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n    return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n    if (is.empty(input)) {\n        return input;\n    }\n\n    return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n    if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n        return 0;\n    }\n\n    return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n    return input.replace(\n        new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n        replace.toString(),\n    );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n    return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n    let string = input.toString();\n\n    // Convert kebab case\n    string = replaceAll(string, '-', ' ');\n\n    // Convert snake case\n    string = replaceAll(string, '_', ' ');\n\n    // Convert to title case\n    string = toTitleCase(string);\n\n    // Convert to pascal case\n    return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n    let string = input.toString();\n\n    // Convert to pascal case\n    string = toPascalCase(string);\n\n    // Convert first character to lowercase\n    return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n    const fragment = document.createDocumentFragment();\n    const element = document.createElement('div');\n    fragment.appendChild(element);\n    element.innerHTML = source;\n    return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n    const wrapper = document.createElement('div');\n    wrapper.appendChild(element);\n    return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\nconst i18n = {\n    get(key = '', config = {}) {\n        if (is.empty(key) || is.empty(config)) {\n            return '';\n        }\n\n        let string = getDeep(config.i18n, key);\n\n        if (is.empty(string)) {\n            return '';\n        }\n\n        const replace = {\n            '{seektime}': config.seekTime,\n            '{title}': config.title,\n        };\n\n        Object.entries(replace).forEach(([key, value]) => {\n            string = replaceAll(string, key, value);\n        });\n\n        return string;\n    },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n    constructor(player) {\n        this.enabled = player.config.storage.enabled;\n        this.key = player.config.storage.key;\n    }\n\n    // Check for actual support (see if we can use it)\n    static get supported() {\n        try {\n            if (!('localStorage' in window)) {\n                return false;\n            }\n\n            const test = '___test';\n\n            // Try to use it (it might be disabled, e.g. user is in private mode)\n            // see: https://github.com/sampotts/plyr/issues/131\n            window.localStorage.setItem(test, test);\n            window.localStorage.removeItem(test);\n\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    get(key) {\n        if (!Storage.supported || !this.enabled) {\n            return null;\n        }\n\n        const store = window.localStorage.getItem(this.key);\n\n        if (is.empty(store)) {\n            return null;\n        }\n\n        const json = JSON.parse(store);\n\n        return is.string(key) && key.length ? json[key] : json;\n    }\n\n    set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n            return;\n        }\n\n        // Can only store objectst\n        if (!is.object(object)) {\n            return;\n        }\n\n        // Get current storage\n        let storage = this.get();\n\n        // Default to empty object\n        if (is.empty(storage)) {\n            storage = {};\n        }\n\n        // Update the working copy of the values\n        extend(storage, object);\n\n        // Update storage\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n    return new Promise((resolve, reject) => {\n        try {\n            const request = new XMLHttpRequest();\n\n            // Check for CORS support\n            if (!('withCredentials' in request)) {\n                return;\n            }\n\n            request.addEventListener('load', () => {\n                if (responseType === 'text') {\n                    try {\n                        resolve(JSON.parse(request.responseText));\n                    } catch (e) {\n                        resolve(request.responseText);\n                    }\n                } else {\n                    resolve(request.response);\n                }\n            });\n\n            request.addEventListener('error', () => {\n                throw new Error(request.status);\n            });\n\n            request.open('GET', url, true);\n\n            // Set the required response type\n            request.responseType = responseType;\n\n            request.send();\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n    if (!is.string(url)) {\n        return;\n    }\n\n    const prefix = 'cache';\n    const hasId = is.string(id);\n    let isCached = false;\n\n    const exists = () => document.getElementById(id) !== null;\n\n    const update = (container, data) => {\n        container.innerHTML = data;\n\n        // Check again incase of race condition\n        if (hasId && exists()) {\n            return;\n        }\n\n        // Inject the SVG to the body\n        document.body.insertAdjacentElement('afterbegin', container);\n    };\n\n    // Only load once if ID set\n    if (!hasId || !exists()) {\n        const useStorage = Storage.supported;\n\n        // Create container\n        const container = document.createElement('div');\n        container.setAttribute('hidden', '');\n\n        if (hasId) {\n            container.setAttribute('id', id);\n        }\n\n        // Check in cache\n        if (useStorage) {\n            const cached = window.localStorage.getItem(`${prefix}-${id}`);\n            isCached = cached !== null;\n\n            if (isCached) {\n                const data = JSON.parse(cached);\n                update(container, data.content);\n            }\n        }\n\n        // Get the sprite\n        fetch(url)\n            .then(result => {\n                if (is.empty(result)) {\n                    return;\n                }\n\n                if (useStorage) {\n                    window.localStorage.setItem(\n                        `${prefix}-${id}`,\n                        JSON.stringify({\n                            content: result,\n                        }),\n                    );\n                }\n\n                update(container, result);\n            })\n            .catch(() => {});\n    }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n    // Bail if the value isn't a number\n    if (!is.number(time)) {\n        return formatTime(null, displayHours, inverted);\n    }\n\n    // Format time component to add leading zero\n    const format = value => `0${value}`.slice(-2);\n\n    // Breakdown to hours, mins, secs\n    let hours = getHours(time);\n    const mins = getMinutes(time);\n    const secs = getSeconds(time);\n\n    // Do we need to display hours?\n    if (displayHours || hours > 0) {\n        hours = `${hours}:`;\n    } else {\n        hours = '';\n    }\n\n    // Render\n    return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n    // Get icon URL\n    getIconUrl() {\n        const url = new URL(this.config.iconUrl, window.location);\n        const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n        return {\n            url: this.config.iconUrl,\n            cors,\n        };\n    },\n\n    // Find the UI controls\n    findElements() {\n        try {\n            this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n            // Buttons\n            this.elements.buttons = {\n                play: getElements.call(this, this.config.selectors.buttons.play),\n                pause: getElement.call(this, this.config.selectors.buttons.pause),\n                restart: getElement.call(this, this.config.selectors.buttons.restart),\n                rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n                fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n                mute: getElement.call(this, this.config.selectors.buttons.mute),\n                pip: getElement.call(this, this.config.selectors.buttons.pip),\n                airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n                settings: getElement.call(this, this.config.selectors.buttons.settings),\n                captions: getElement.call(this, this.config.selectors.buttons.captions),\n                fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n            };\n\n            // Progress\n            this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n            // Inputs\n            this.elements.inputs = {\n                seek: getElement.call(this, this.config.selectors.inputs.seek),\n                volume: getElement.call(this, this.config.selectors.inputs.volume),\n            };\n\n            // Display\n            this.elements.display = {\n                buffer: getElement.call(this, this.config.selectors.display.buffer),\n                currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n                duration: getElement.call(this, this.config.selectors.display.duration),\n            };\n\n            // Seek tooltip\n            if (is.element(this.elements.progress)) {\n                this.elements.display.seekTooltip = this.elements.progress.querySelector(\n                    `.${this.config.classNames.tooltip}`,\n                );\n            }\n\n            return true;\n        } catch (error) {\n            // Log it\n            this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n            // Restore native video controls\n            this.toggleNativeControls(true);\n\n            return false;\n        }\n    },\n\n    // Create <svg> icon\n    createIcon(type, attributes) {\n        const namespace = 'http://www.w3.org/2000/svg';\n        const iconUrl = controls.getIconUrl.call(this);\n        const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n        // Create <svg>\n        const icon = document.createElementNS(namespace, 'svg');\n        setAttributes(\n            icon,\n            extend(attributes, {\n                role: 'presentation',\n                focusable: 'false',\n            }),\n        );\n\n        // Create the <use> to reference sprite\n        const use = document.createElementNS(namespace, 'use');\n        const path = `${iconPath}-${type}`;\n\n        // Set `href` attributes\n        // https://github.com/sampotts/plyr/issues/460\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n        if ('href' in use) {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n        } 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        // Skip i18n for abbreviations and brand names\n        const universals = {\n            pip: 'PIP',\n            airplay: 'AirPlay',\n        };\n        const text = universals[type] || i18n.get(type, this.config);\n\n        const attributes = Object.assign({}, attr, {\n            class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n        });\n        return createElement('span', attributes, text);\n    },\n\n    // Create a badge\n    createBadge(text) {\n        if (is.empty(text)) {\n            return null;\n        }\n\n        const badge = createElement('span', {\n            class: this.config.classNames.menu.value,\n        });\n\n        badge.appendChild(\n            createElement(\n                'span',\n                {\n                    class: this.config.classNames.menu.badge,\n                },\n                text,\n            ),\n        );\n\n        return badge;\n    },\n\n    // Create a <button>\n    createButton(buttonType, attr) {\n        const button = createElement('button');\n        const attributes = Object.assign({}, attr);\n        let type = 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(\n                controls.createIcon.call(this, iconPressed, {\n                    class: 'icon--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createIcon.call(this, icon, {\n                    class: 'icon--not-pressed',\n                }),\n            );\n\n            // Label/Tooltip\n            button.appendChild(\n                controls.createLabel.call(this, labelPressed, {\n                    class: 'label--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createLabel.call(this, label, {\n                    class: 'label--not-pressed',\n                }),\n            );\n        } else {\n            button.appendChild(controls.createIcon.call(this, icon));\n            button.appendChild(controls.createLabel.call(this, label));\n        }\n\n        // Merge attributes\n        extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n        setAttributes(button, attributes);\n\n        // We have multiple play buttons\n        if (type === 'play') {\n            if (!is.array(this.elements.buttons[type])) {\n                this.elements.buttons[type] = [];\n            }\n\n            this.elements.buttons[type].push(button);\n        } else {\n            this.elements.buttons[type] = button;\n        }\n\n        return button;\n    },\n\n    // Create an <input type='range'>\n    createRange(type, attributes) {\n        // Seek input\n        const input = createElement(\n            'input',\n            extend(\n                getAttributesFromSelector(this.config.selectors.inputs[type]),\n                {\n                    type: 'range',\n                    min: 0,\n                    max: 100,\n                    step: 0.01,\n                    value: 0,\n                    autocomplete: 'off',\n                    // A11y fixes for https://github.com/sampotts/plyr/issues/905\n                    role: 'slider',\n                    'aria-label': i18n.get(type, this.config),\n                    'aria-valuemin': 0,\n                    'aria-valuemax': 100,\n                    'aria-valuenow': 0,\n                },\n                attributes,\n            ),\n        );\n\n        this.elements.inputs[type] = input;\n\n        // Set the fill for webkit now\n        controls.updateRangeFill.call(this, input);\n\n        return input;\n    },\n\n    // Create a <progress>\n    createProgress(type, attributes) {\n        const progress = createElement(\n            'progress',\n            extend(\n                getAttributesFromSelector(this.config.selectors.display[type]),\n                {\n                    min: 0,\n                    max: 100,\n                    value: 0,\n                    role: 'presentation',\n                    'aria-hidden': true,\n                },\n                attributes,\n            ),\n        );\n\n        // Create the label inside\n        if (type !== 'volume') {\n            progress.appendChild(createElement('span', null, '0'));\n\n            const suffixKey = {\n                played: 'played',\n                buffer: 'buffered',\n            }[type];\n            const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n            progress.innerText = `% ${suffix.toLowerCase()}`;\n        }\n\n        this.elements.display[type] = progress;\n\n        return progress;\n    },\n\n    // Create time display\n    createTime(type) {\n        const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n        const container = createElement(\n            'div',\n            extend(attributes, {\n                class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-label': i18n.get(type, this.config),\n            }),\n            '00:00',\n        );\n\n        // Reference for updates\n        this.elements.display[type] = container;\n\n        return container;\n    },\n\n    // Bind keyboard shortcuts for a menu item\n    // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n    bindMenuItemShortcuts(menuItem, type) {\n        // Navigate through menus via arrow keys and space\n        on(\n            menuItem,\n            'keydown keyup',\n            event => {\n                // We only care about space and ⬆️ ⬇️️ ➡️\n                if (![32, 38, 39, 40].includes(event.which)) {\n                    return;\n                }\n\n                // Prevent play / seek\n                event.preventDefault();\n                event.stopPropagation();\n\n                // We're just here to prevent the keydown bubbling\n                if (event.type === 'keydown') {\n                    return;\n                }\n\n                const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n                // Show the respective menu\n                if (!isRadioButton && [32, 39].includes(event.which)) {\n                    controls.showMenuPanel.call(this, type, true);\n                } else {\n                    let target;\n\n                    if (event.which !== 32) {\n                        if (event.which === 40 || (isRadioButton && event.which === 39)) {\n                            target = menuItem.nextElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.firstElementChild;\n                            }\n                        } else {\n                            target = menuItem.previousElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.lastElementChild;\n                            }\n                        }\n\n                        setFocus.call(this, target, true);\n                    }\n                }\n            },\n            false,\n        );\n\n        // Enter will fire a `click` event but we still need to manage focus\n        // So we bind to keyup which fires after and set focus here\n        on(menuItem, 'keyup', event => {\n            if (event.which !== 13) {\n                return;\n            }\n\n            controls.focusFirstMenuItem.call(this, null, true);\n        });\n    },\n\n    // Create a settings menu item\n    createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n        const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n        const menuItem = createElement(\n            'button',\n            extend(attributes, {\n                type: 'button',\n                role: 'menuitemradio',\n                class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-checked': checked,\n                value,\n            }),\n        );\n\n        const flex = createElement('span');\n\n        // We have to set as HTML incase of special characters\n        flex.innerHTML = title;\n\n        if (is.element(badge)) {\n            flex.appendChild(badge);\n        }\n\n        menuItem.appendChild(flex);\n\n        // Replicate radio button behaviour\n        Object.defineProperty(menuItem, 'checked', {\n            enumerable: true,\n            get() {\n                return menuItem.getAttribute('aria-checked') === 'true';\n            },\n            set(checked) {\n                // Ensure exclusivity\n                if (checked) {\n                    Array.from(menuItem.parentNode.children)\n                        .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n                        .forEach(node => node.setAttribute('aria-checked', 'false'));\n                }\n\n                menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n            },\n        });\n\n        this.listeners.bind(\n            menuItem,\n            'click keyup',\n            event => {\n                if (is.keyboardEvent(event) && event.which !== 32) {\n                    return;\n                }\n\n                event.preventDefault();\n                event.stopPropagation();\n\n                menuItem.checked = true;\n\n                switch (type) {\n                    case 'language':\n                        this.currentTrack = Number(value);\n                        break;\n\n                    case 'quality':\n                        this.quality = value;\n                        break;\n\n                    case 'speed':\n                        this.speed = parseFloat(value);\n                        break;\n\n                    default:\n                        break;\n                }\n\n                controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n            },\n            type,\n            false,\n        );\n\n        controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n        list.appendChild(menuItem);\n    },\n\n    // Format a time for display\n    formatTime(time = 0, inverted = false) {\n        // Bail if the value isn't a number\n        if (!is.number(time)) {\n            return time;\n        }\n\n        // Always display hours if duration is over an hour\n        const forceHours = getHours(this.duration) > 0;\n\n        return formatTime(time, forceHours, inverted);\n    },\n\n    // Update the displayed time\n    updateTimeDisplay(target = null, time = 0, inverted = false) {\n        // Bail if there's no element to display or the value isn't a number\n        if (!is.element(target) || !is.number(time)) {\n            return;\n        }\n\n        // eslint-disable-next-line no-param-reassign\n        target.innerText = controls.formatTime(time, inverted);\n    },\n\n    // Update volume UI and storage\n    updateVolume() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Update range\n        if (is.element(this.elements.inputs.volume)) {\n            controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n        }\n\n        // Update mute state\n        if (is.element(this.elements.buttons.mute)) {\n            this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n        }\n    },\n\n    // Update seek value and lower fill\n    setRange(target, value = 0) {\n        if (!is.element(target)) {\n            return;\n        }\n\n        // eslint-disable-next-line\n        target.value = value;\n\n        // Webkit range fill\n        controls.updateRangeFill.call(this, target);\n    },\n\n    // Update <progress> elements\n    updateProgress(event) {\n        if (!this.supported.ui || !is.event(event)) {\n            return;\n        }\n\n        let value = 0;\n\n        const setProgress = (target, input) => {\n            const value = is.number(input) ? input : 0;\n            const progress = is.element(target) ? target : this.elements.display.buffer;\n\n            // Update value and label\n            if (is.element(progress)) {\n                progress.value = value;\n\n                // Update text label inside\n                const label = progress.getElementsByTagName('span')[0];\n                if (is.element(label)) {\n                    label.childNodes[0].nodeValue = value;\n                }\n            }\n        };\n\n        if (event) {\n            switch (event.type) {\n                // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                case 'seeked':\n                    value = getPercentage(this.currentTime, this.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type === 'timeupdate') {\n                        controls.setRange.call(this, this.elements.inputs.seek, value);\n                    }\n\n                    break;\n\n                // Check buffer status\n                case 'playing':\n                case 'progress':\n                    setProgress(this.elements.display.buffer, this.buffered * 100);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n    },\n\n    // Webkit polyfill for lower fill range\n    updateRangeFill(target) {\n        // Get range from event if event passed\n        const range = is.event(target) ? target.target : target;\n\n        // Needs to be a valid <input type='range'>\n        if (!is.element(range) || range.getAttribute('type') !== 'range') {\n            return;\n        }\n\n        // Set aria values for https://github.com/sampotts/plyr/issues/905\n        if (matches(range, this.config.selectors.inputs.seek)) {\n            range.setAttribute('aria-valuenow', this.currentTime);\n            const currentTime = controls.formatTime(this.currentTime);\n            const duration = controls.formatTime(this.duration);\n            const format = i18n.get('seekLabel', this.config);\n            range.setAttribute(\n                'aria-valuetext',\n                format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n            );\n        } else if (matches(range, this.config.selectors.inputs.volume)) {\n            const percent = range.value * 100;\n            range.setAttribute('aria-valuenow', percent);\n            range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n        } else {\n            range.setAttribute('aria-valuenow', range.value);\n        }\n\n        // WebKit only\n        if (!browser.isWebkit) {\n            return;\n        }\n\n        // Set CSS custom property\n        range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n    },\n\n    // Update hover tooltip for seeking\n    updateSeekTooltip(event) {\n        // Bail if setting not true\n        if (\n            !this.config.tooltips.seek ||\n            !is.element(this.elements.inputs.seek) ||\n            !is.element(this.elements.display.seekTooltip) ||\n            this.duration === 0\n        ) {\n            return;\n        }\n\n        // Calculate percentage\n        let percent = 0;\n        const clientRect = this.elements.progress.getBoundingClientRect();\n        const visible = `${this.config.classNames.tooltip}--visible`;\n\n        const toggle = toggle => {\n            toggleClass(this.elements.display.seekTooltip, visible, toggle);\n        };\n\n        // Hide on touch\n        if (this.touch) {\n            toggle(false);\n            return;\n        }\n\n        // Determine percentage, if already visible\n        if (is.event(event)) {\n            percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n        } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n            percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n        } else {\n            return;\n        }\n\n        // Set bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Display the time a click would seek to\n        controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n        // Set position\n        this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n        // Show/hide the tooltip\n        // If the event is a moues in/out and percentage is inside bounds\n        if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n            toggle(event.type === 'mouseenter');\n        }\n    },\n\n    // Handle time change event\n    timeUpdate(event) {\n        // Only invert if only one time element is displayed and used for both duration and currentTime\n        const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n        // Duration\n        controls.updateTimeDisplay.call(\n            this,\n            this.elements.display.currentTime,\n            invert ? this.duration - this.currentTime : this.currentTime,\n            invert,\n        );\n\n        // Ignore updates while seeking\n        if (event && event.type === 'timeupdate' && this.media.seeking) {\n            return;\n        }\n\n        // Playing progress\n        controls.updateProgress.call(this, event);\n    },\n\n    // Show the duration on metadataloaded or durationchange events\n    durationUpdate() {\n        // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n        if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n            return;\n        }\n\n        // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n        // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n        // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n        // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n        if (this.duration >= 2 ** 32) {\n            toggleHidden(this.elements.display.currentTime, true);\n            toggleHidden(this.elements.progress, true);\n            return;\n        }\n\n        // Update ARIA values\n        if (is.element(this.elements.inputs.seek)) {\n            this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n        }\n\n        // If there's a spot to display duration\n        const hasDuration = is.element(this.elements.display.duration);\n\n        // If there's only one time display, display duration there\n        if (!hasDuration && this.config.displayDuration && this.paused) {\n            controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n        }\n\n        // If there's a duration element, update content\n        if (hasDuration) {\n            controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n        }\n\n        // Update the tooltip (if visible)\n        controls.updateSeekTooltip.call(this);\n    },\n\n    // Hide/show a tab\n    toggleMenuButton(setting, toggle) {\n        toggleHidden(this.elements.settings.buttons[setting], !toggle);\n    },\n\n    // Update the selected setting\n    updateSetting(setting, container, input) {\n        const pane = this.elements.settings.panels[setting];\n        let value = null;\n        let list = container;\n\n        if (setting === 'captions') {\n            value = this.currentTrack;\n        } else {\n            value = !is.empty(input) ? input : this[setting];\n\n            // Get default\n            if (is.empty(value)) {\n                value = this.config[setting].default;\n            }\n\n            // Unsupported value\n            if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n                this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n                return;\n            }\n\n            // Disabled value\n            if (!this.config[setting].options.includes(value)) {\n                this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n                return;\n            }\n        }\n\n        // Get the list if we need to\n        if (!is.element(list)) {\n            list = pane && pane.querySelector('[role=\"menu\"]');\n        }\n\n        // If there's no list it means it's not been rendered...\n        if (!is.element(list)) {\n            return;\n        }\n\n        // Update the label\n        const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n        label.innerHTML = controls.getLabel.call(this, setting, value);\n\n        // Find the radio option and check it\n        const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n        if (is.element(target)) {\n            target.checked = true;\n        }\n    },\n\n    // Translate a value into a nice label\n    getLabel(setting, value) {\n        switch (setting) {\n            case 'speed':\n                return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n            case 'quality':\n                if (is.number(value)) {\n                    const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n                    if (!label.length) {\n                        return `${value}p`;\n                    }\n\n                    return label;\n                }\n\n                return toTitleCase(value);\n\n            case 'captions':\n                return captions.getLabel.call(this);\n\n            default:\n                return null;\n        }\n    },\n\n    // Set the quality menu\n    setQualityMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.quality)) {\n            return;\n        }\n\n        const type = 'quality';\n        const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n        // Set options if passed and filter based on uniqueness and config\n        if (is.array(options)) {\n            this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n        }\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Get the badge HTML for HD, 4K etc\n        const getBadge = quality => {\n            const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n            if (!label.length) {\n                return null;\n            }\n\n            return controls.createBadge.call(this, label);\n        };\n\n        // Sort options by the config and then render options\n        this.options.quality\n            .sort((a, b) => {\n                const sorting = this.config.quality.options;\n                return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n            })\n            .forEach(quality => {\n                controls.createMenuItem.call(this, {\n                    value: quality,\n                    list,\n                    type,\n                    title: controls.getLabel.call(this, 'quality', quality),\n                    badge: getBadge(quality),\n                });\n            });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set the looping options\n    /* setLoopMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.loop)) {\n            return;\n        }\n\n        const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n        // Show the pane and tab\n        toggleHidden(this.elements.settings.buttons.loop, false);\n        toggleHidden(this.elements.settings.panels.loop, false);\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.loop.options);\n        controls.toggleMenuButton.call(this, 'loop', toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        options.forEach(option => {\n            const item = createElement('li');\n\n            const button = createElement(\n                'button',\n                extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                i18n.get(option, this.config)\n            );\n\n            if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n\n            item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n\n    // Set a list of available captions languages\n    setCaptionsMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.captions)) {\n            return;\n        }\n\n        // TODO: Captions or language? Currently it's mixed\n        const type = 'captions';\n        const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n        const tracks = captions.getTracks.call(this);\n        const toggle = Boolean(tracks.length);\n\n        // Toggle the pane and tab\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If there's no captions, bail\n        if (!toggle) {\n            return;\n        }\n\n        // Generate options data\n        const options = tracks.map((track, value) => ({\n            value,\n            checked: this.captions.toggled && this.currentTrack === value,\n            title: captions.getLabel.call(this, track),\n            badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n            list,\n            type: 'language',\n        }));\n\n        // Add the \"Disabled\" option to turn off captions\n        options.unshift({\n            value: -1,\n            checked: !this.captions.toggled,\n            title: i18n.get('disabled', this.config),\n            list,\n            type: 'language',\n        });\n\n        // Generate options\n        options.forEach(controls.createMenuItem.bind(this));\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set a list of available captions languages\n    setSpeedMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.speed)) {\n            return;\n        }\n\n        const type = 'speed';\n        const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n        // Set the speed options\n        if (is.array(options)) {\n            this.options.speed = options;\n        } else if (this.isHTML5 || this.isVimeo) {\n            this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n        }\n\n        // Set options if passed and filter based on config\n        this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Create items\n        this.options.speed.forEach(speed => {\n            controls.createMenuItem.call(this, {\n                value: speed,\n                list,\n                type,\n                title: controls.getLabel.call(this, 'speed', speed),\n            });\n        });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Check if we need to hide/show the settings menu\n    checkMenu() {\n        const { buttons } = this.elements.settings;\n        const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n        toggleHidden(this.elements.settings.menu, !visible);\n    },\n\n    // Focus the first menu item in a given (or visible) menu\n    focusFirstMenuItem(pane, tabFocus = false) {\n        if (this.elements.settings.popup.hidden) {\n            return;\n        }\n\n        let target = pane;\n\n        if (!is.element(target)) {\n            target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n        }\n\n        const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n        setFocus.call(this, firstItem, tabFocus);\n    },\n\n    // Show/hide menu\n    toggleMenu(input) {\n        const { popup } = this.elements.settings;\n        const button = this.elements.buttons.settings;\n\n        // Menu and button are required\n        if (!is.element(popup) || !is.element(button)) {\n            return;\n        }\n\n        // True toggle by default\n        const { hidden } = popup;\n        let show = hidden;\n\n        if (is.boolean(input)) {\n            show = input;\n        } else if (is.keyboardEvent(input) && input.which === 27) {\n            show = false;\n        } else if (is.event(input)) {\n            const isMenuItem = popup.contains(input.target);\n\n            // If the click was inside the menu or if the click\n            // wasn't the button or menu item and we're trying to\n            // show the menu (a doc click shouldn't show the menu)\n            if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n                return;\n            }\n        }\n\n        // Set button attributes\n        button.setAttribute('aria-expanded', show);\n\n        // Show the actual popup\n        toggleHidden(popup, !show);\n\n        // Add class hook\n        toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n        // Focus the first item if key interaction\n        if (show && is.keyboardEvent(input)) {\n            controls.focusFirstMenuItem.call(this, null, true);\n        } else if (!show && !hidden) {\n            // If closing, re-focus the button\n            setFocus.call(this, button, is.keyboardEvent(input));\n        }\n    },\n\n    // Get the natural size of a menu panel\n    getMenuSize(tab) {\n        const clone = tab.cloneNode(true);\n        clone.style.position = 'absolute';\n        clone.style.opacity = 0;\n        clone.removeAttribute('hidden');\n\n        // Append to parent so we get the \"real\" size\n        tab.parentNode.appendChild(clone);\n\n        // Get the sizes before we remove\n        const width = clone.scrollWidth;\n        const height = clone.scrollHeight;\n\n        // Remove from the DOM\n        removeElement(clone);\n\n        return {\n            width,\n            height,\n        };\n    },\n\n    // Show a panel in the menu\n    showMenuPanel(type = '', tabFocus = false) {\n        const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n        // Nothing to show, bail\n        if (!is.element(target)) {\n            return;\n        }\n\n        // Hide all other panels\n        const container = target.parentNode;\n        const current = Array.from(container.children).find(node => !node.hidden);\n\n        // If we can do fancy animations, we'll animate the height/width\n        if (support.transitions && !support.reducedMotion) {\n            // Set the current width as a base\n            container.style.width = `${current.scrollWidth}px`;\n            container.style.height = `${current.scrollHeight}px`;\n\n            // Get potential sizes\n            const size = controls.getMenuSize.call(this, target);\n\n            // Restore auto height/width\n            const restore = event => {\n                // We're only bothered about height and width on the container\n                if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n                    return;\n                }\n\n                // Revert back to auto\n                container.style.width = '';\n                container.style.height = '';\n\n                // Only listen once\n                off.call(this, container, transitionEndEvent, restore);\n            };\n\n            // Listen for the transition finishing and restore auto height/width\n            on.call(this, container, transitionEndEvent, restore);\n\n            // Set dimensions to target\n            container.style.width = `${size.width}px`;\n            container.style.height = `${size.height}px`;\n        }\n\n        // Set attributes on current tab\n        toggleHidden(current, true);\n\n        // Set attributes on target\n        toggleHidden(target, false);\n\n        // Focus the first item\n        controls.focusFirstMenuItem.call(this, target, tabFocus);\n    },\n\n    // Build the default HTML\n    // TODO: Set order based on order in the config.controls array?\n    create(data) {\n        // Create the container\n        const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n        // Restart button\n        if (this.config.controls.includes('restart')) {\n            container.appendChild(controls.createButton.call(this, 'restart'));\n        }\n\n        // Rewind button\n        if (this.config.controls.includes('rewind')) {\n            container.appendChild(controls.createButton.call(this, 'rewind'));\n        }\n\n        // Play/Pause button\n        if (this.config.controls.includes('play')) {\n            container.appendChild(controls.createButton.call(this, 'play'));\n        }\n\n        // Fast forward button\n        if (this.config.controls.includes('fast-forward')) {\n            container.appendChild(controls.createButton.call(this, 'fast-forward'));\n        }\n\n        // Progress\n        if (this.config.controls.includes('progress')) {\n            const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n            // Seek range slider\n            progress.appendChild(\n                controls.createRange.call(this, 'seek', {\n                    id: `plyr-seek-${data.id}`,\n                }),\n            );\n\n            // Buffer progress\n            progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n            // TODO: Add loop display indicator\n\n            // Seek tooltip\n            if (this.config.tooltips.seek) {\n                const tooltip = createElement(\n                    'span',\n                    {\n                        class: this.config.classNames.tooltip,\n                    },\n                    '00:00',\n                );\n\n                progress.appendChild(tooltip);\n                this.elements.display.seekTooltip = tooltip;\n            }\n\n            this.elements.progress = progress;\n            container.appendChild(this.elements.progress);\n        }\n\n        // Media current time display\n        if (this.config.controls.includes('current-time')) {\n            container.appendChild(controls.createTime.call(this, 'currentTime'));\n        }\n\n        // Media duration display\n        if (this.config.controls.includes('duration')) {\n            container.appendChild(controls.createTime.call(this, 'duration'));\n        }\n\n        // Volume controls\n        if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n            const volume = createElement('div', {\n                class: 'plyr__volume',\n            });\n\n            // Toggle mute button\n            if (this.config.controls.includes('mute')) {\n                volume.appendChild(controls.createButton.call(this, 'mute'));\n            }\n\n            // Volume range control\n            if (this.config.controls.includes('volume')) {\n                // Set the attributes\n                const attributes = {\n                    max: 1,\n                    step: 0.05,\n                    value: this.config.volume,\n                };\n\n                // Create the volume range slider\n                volume.appendChild(\n                    controls.createRange.call(\n                        this,\n                        'volume',\n                        extend(attributes, {\n                            id: `plyr-volume-${data.id}`,\n                        }),\n                    ),\n                );\n\n                this.elements.volume = volume;\n            }\n\n            container.appendChild(volume);\n        }\n\n        // Toggle captions button\n        if (this.config.controls.includes('captions')) {\n            container.appendChild(controls.createButton.call(this, 'captions'));\n        }\n\n        // Settings button / menu\n        if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n            const control = createElement('div', {\n                class: 'plyr__menu',\n                hidden: '',\n            });\n\n            control.appendChild(\n                controls.createButton.call(this, 'settings', {\n                    'aria-haspopup': true,\n                    'aria-controls': `plyr-settings-${data.id}`,\n                    'aria-expanded': false,\n                }),\n            );\n\n            const popup = createElement('div', {\n                class: 'plyr__menu__container',\n                id: `plyr-settings-${data.id}`,\n                hidden: '',\n            });\n\n            const inner = createElement('div');\n\n            const home = createElement('div', {\n                id: `plyr-settings-${data.id}-home`,\n            });\n\n            // Create the menu\n            const menu = createElement('div', {\n                role: 'menu',\n            });\n\n            home.appendChild(menu);\n            inner.appendChild(home);\n            this.elements.settings.panels.home = home;\n\n            // Build the menu items\n            this.config.settings.forEach(type => {\n                // TODO: bundle this with the createMenuItem helper and bindings\n                const menuItem = createElement(\n                    'button',\n                    extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n                        role: 'menuitem',\n                        'aria-haspopup': true,\n                        hidden: '',\n                    }),\n                );\n\n                // Bind menu shortcuts for keyboard users\n                controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n                // Show menu on click\n                on(menuItem, 'click', () => {\n                    controls.showMenuPanel.call(this, type, false);\n                });\n\n                const flex = createElement('span', null, i18n.get(type, this.config));\n\n                const value = createElement('span', {\n                    class: this.config.classNames.menu.value,\n                });\n\n                // Speed contains HTML entities\n                value.innerHTML = data[type];\n\n                flex.appendChild(value);\n                menuItem.appendChild(flex);\n                menu.appendChild(menuItem);\n\n                // Build the panes\n                const pane = createElement('div', {\n                    id: `plyr-settings-${data.id}-${type}`,\n                    hidden: '',\n                });\n\n                // Back button\n                const backButton = createElement('button', {\n                    type: 'button',\n                    class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n                });\n\n                // Visible label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            'aria-hidden': true,\n                        },\n                        i18n.get(type, this.config),\n                    ),\n                );\n\n                // Screen reader label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            class: this.config.classNames.hidden,\n                        },\n                        i18n.get('menuBack', this.config),\n                    ),\n                );\n\n                // Go back via keyboard\n                on(\n                    pane,\n                    'keydown',\n                    event => {\n                        // We only care about <-\n                        if (event.which !== 37) {\n                            return;\n                        }\n\n                        // Prevent seek\n                        event.preventDefault();\n                        event.stopPropagation();\n\n                        // Show the respective menu\n                        controls.showMenuPanel.call(this, 'home', true);\n                    },\n                    false,\n                );\n\n                // Go back via button click\n                on(backButton, 'click', () => {\n                    controls.showMenuPanel.call(this, 'home', false);\n                });\n\n                // Add to pane\n                pane.appendChild(backButton);\n\n                // Menu\n                pane.appendChild(\n                    createElement('div', {\n                        role: 'menu',\n                    }),\n                );\n\n                inner.appendChild(pane);\n\n                this.elements.settings.buttons[type] = menuItem;\n                this.elements.settings.panels[type] = pane;\n            });\n\n            popup.appendChild(inner);\n            control.appendChild(popup);\n            container.appendChild(control);\n\n            this.elements.settings.popup = popup;\n            this.elements.settings.menu = control;\n        }\n\n        // Picture in picture button\n        if (this.config.controls.includes('pip') && support.pip) {\n            container.appendChild(controls.createButton.call(this, 'pip'));\n        }\n\n        // Airplay button\n        if (this.config.controls.includes('airplay') && support.airplay) {\n            container.appendChild(controls.createButton.call(this, 'airplay'));\n        }\n\n        // Toggle fullscreen button\n        if (this.config.controls.includes('fullscreen')) {\n            container.appendChild(controls.createButton.call(this, 'fullscreen'));\n        }\n\n        // Larger overlaid play button\n        if (this.config.controls.includes('play-large')) {\n            this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n        }\n\n        this.elements.controls = container;\n\n        // Set available quality levels\n        if (this.isHTML5) {\n            controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n        }\n\n        controls.setSpeedMenu.call(this);\n\n        return container;\n    },\n\n    // Insert controls\n    inject() {\n        // Sprite\n        if (this.config.loadSprite) {\n            const icon = controls.getIconUrl.call(this);\n\n            // Only load external sprite using AJAX\n            if (icon.cors) {\n                loadSprite(icon.url, 'sprite-plyr');\n            }\n        }\n\n        // Create a unique ID\n        this.id = Math.floor(Math.random() * 10000);\n\n        // Null by default\n        let container = null;\n        this.elements.controls = null;\n\n        // Set template properties\n        const props = {\n            id: this.id,\n            seektime: this.config.seekTime,\n            title: this.config.title,\n        };\n        let update = true;\n\n        // If function, run it and use output\n        if (is.function(this.config.controls)) {\n            this.config.controls = this.config.controls.call(this.props);\n        }\n\n        // Convert falsy controls to empty array (primarily for empty strings)\n        if (!this.config.controls) {\n            this.config.controls = [];\n        }\n\n        if (is.element(this.config.controls) || is.string(this.config.controls)) {\n            // HTMLElement or Non-empty string passed as the option\n            container = this.config.controls;\n        } else {\n            // Create controls\n            container = controls.create.call(this, {\n                id: this.id,\n                seektime: this.config.seekTime,\n                speed: this.speed,\n                quality: this.quality,\n                captions: captions.getLabel.call(this),\n                // TODO: Looping\n                // loop: 'None',\n            });\n            update = false;\n        }\n\n        // Replace props with their value\n        const replace = input => {\n            let result = input;\n\n            Object.entries(props).forEach(([key, value]) => {\n                result = replaceAll(result, `{${key}}`, value);\n            });\n\n            return result;\n        };\n\n        // Update markup\n        if (update) {\n            if (is.string(this.config.controls)) {\n                container = replace(container);\n            } else if (is.element(container)) {\n                container.innerHTML = replace(container.innerHTML);\n            }\n        }\n\n        // Controls container\n        let target;\n\n        // Inject to custom location\n        if (is.string(this.config.selectors.controls.container)) {\n            target = document.querySelector(this.config.selectors.controls.container);\n        }\n\n        // Inject into the container by default\n        if (!is.element(target)) {\n            target = this.elements.container;\n        }\n\n        // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n        const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n        target[insertMethod]('afterbegin', container);\n\n        // Find the elements if need be\n        if (!is.element(this.elements.controls)) {\n            controls.findElements.call(this);\n        }\n\n        // Add pressed property to buttons\n        if (!is.empty(this.elements.buttons)) {\n            const addProperty = button => {\n                const className = this.config.classNames.controlPressed;\n                Object.defineProperty(button, 'pressed', {\n                    enumerable: true,\n                    get() {\n                        return hasClass(button, className);\n                    },\n                    set(pressed = false) {\n                        toggleClass(button, className, pressed);\n                    },\n                });\n            };\n\n            // Toggle classname when pressed property is set\n            Object.values(this.elements.buttons)\n                .filter(Boolean)\n                .forEach(button => {\n                    if (is.array(button) || is.nodeList(button)) {\n                        Array.from(button).filter(Boolean).forEach(addProperty);\n                    } else {\n                        addProperty(button);\n                    }\n                });\n        }\n\n        // Edge sometimes doesn't finish the paint so force a redraw\n        if (window.navigator.userAgent.includes('Edge')) {\n            repaint(target);\n        }\n\n        // Setup tooltips\n        if (this.config.tooltips.controls) {\n            const { classNames, selectors } = this.config;\n            const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n            const labels = getElements.call(this, selector);\n\n            Array.from(labels).forEach(label => {\n                toggleClass(label, this.config.classNames.hidden, false);\n                toggleClass(label, this.config.classNames.tooltip, true);\n            });\n        }\n    },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n    let url = input;\n\n    if (safe) {\n        const parser = document.createElement('a');\n        parser.href = url;\n        url = parser.href;\n    }\n\n    try {\n        return new URL(url);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n    const params = new URLSearchParams();\n\n    if (is.object(input)) {\n        Object.entries(input).forEach(([key, value]) => {\n            params.set(key, value);\n        });\n    }\n\n    return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n    createElement,\n    emptyElement,\n    getAttributesFromSelector,\n    insertAfter,\n    removeElement,\n    toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n    // Setup captions\n    setup() {\n        // Requires UI support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Only Vimeo and HTML5 video supported at this point\n        if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n            // Clear menu and hide\n            if (\n                is.array(this.config.controls) &&\n                this.config.controls.includes('settings') &&\n                this.config.settings.includes('captions')\n            ) {\n                controls.setCaptionsMenu.call(this);\n            }\n\n            return;\n        }\n\n        // Inject the container\n        if (!is.element(this.elements.captions)) {\n            this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n            insertAfter(this.elements.captions, this.elements.wrapper);\n        }\n\n        // Fix IE captions if CORS is used\n        // Fetch captions and inject as blobs instead (data URIs not supported!)\n        if (browser.isIE && window.URL) {\n            const elements = this.media.querySelectorAll('track');\n\n            Array.from(elements).forEach(track => {\n                const src = track.getAttribute('src');\n                const url = parseUrl(src);\n\n                if (\n                    url !== null &&\n                    url.hostname !== window.location.href.hostname &&\n                    ['http:', 'https:'].includes(url.protocol)\n                ) {\n                    fetch(src, 'blob')\n                        .then(blob => {\n                            track.setAttribute('src', window.URL.createObjectURL(blob));\n                        })\n                        .catch(() => {\n                            removeElement(track);\n                        });\n                }\n            });\n        }\n\n        // Get and set initial data\n        // The \"preferred\" options are not realized unless / until the wanted language has a match\n        // * languages: Array of user's browser languages.\n        // * language:  The language preferred by user settings or config\n        // * active:    The state preferred by user settings or config\n        // * toggled:   The real captions state\n\n        const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n        const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n        let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n        // Use first browser language when language is 'auto'\n        if (language === 'auto') {\n            [language] = languages;\n        }\n\n        let active = this.storage.get('captions');\n        if (!is.boolean(active)) {\n            ({ active } = this.config.captions);\n        }\n\n        Object.assign(this.captions, {\n            toggled: false,\n            active,\n            language,\n            languages,\n        });\n\n        // Watch changes to textTracks and update captions menu\n        if (this.isHTML5) {\n            const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n            on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n        }\n\n        // Update available languages in list next tick (the event must not be triggered before the listeners)\n        setTimeout(captions.update.bind(this), 0);\n    },\n\n    // Update available language options in settings based on tracks\n    update() {\n        const tracks = captions.getTracks.call(this, true);\n        // Get the wanted language\n        const { active, language, meta, currentTrackNode } = this.captions;\n        const languageExists = Boolean(tracks.find(track => track.language === language));\n\n        // Handle tracks (add event listener and \"pseudo\"-default)\n        if (this.isHTML5 && this.isVideo) {\n            tracks.filter(track => !meta.get(track)).forEach(track => {\n                this.debug.log('Track added', track);\n                // Attempt to store if the original dom element was \"default\"\n                meta.set(track, {\n                    default: track.mode === 'showing',\n                });\n\n                // Turn off native caption rendering to avoid double captions\n                track.mode = 'hidden';\n\n                // Add event listener for cue changes\n                on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n            });\n        }\n\n        // Update language first time it matches, or if the previous matching track was removed\n        if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n            captions.setLanguage.call(this, language);\n            captions.toggle.call(this, active && languageExists);\n        }\n\n        // Enable or disable captions based on track length\n        toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n        // Update available languages in list\n        if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n            controls.setCaptionsMenu.call(this);\n        }\n    },\n\n    // Toggle captions display\n    // Used internally for the toggleCaptions method, with the passive option forced to false\n    toggle(input, passive = true) {\n        // If there's no full support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        const { toggled } = this.captions; // Current state\n        const activeClass = this.config.classNames.captions.active;\n\n        // Get the next state\n        // If the method is called without parameter, toggle based on current value\n        const active = is.nullOrUndefined(input) ? !toggled : input;\n\n        // Update state and trigger event\n        if (active !== toggled) {\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.active = active;\n                this.storage.set({ captions: active });\n            }\n\n            // Force language if the call isn't passive and there is no matching language to toggle to\n            if (!this.language && active && !passive) {\n                const tracks = captions.getTracks.call(this);\n                const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n                // Override user preferences to avoid switching languages if a matching track is added\n                this.captions.language = track.language;\n\n                // Set caption, but don't store in localStorage as user preference\n                captions.set.call(this, tracks.indexOf(track));\n                return;\n            }\n\n            // Toggle button if it's enabled\n            if (this.elements.buttons.captions) {\n                this.elements.buttons.captions.pressed = active;\n            }\n\n            // Add class hook\n            toggleClass(this.elements.container, activeClass, active);\n\n            this.captions.toggled = active;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // Trigger event (not used internally)\n            triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n        }\n    },\n\n    // Set captions by track index\n    // Used internally for the currentTrack setter with the passive option forced to false\n    set(index, passive = true) {\n        const tracks = captions.getTracks.call(this);\n\n        // Disable captions if setting to -1\n        if (index === -1) {\n            captions.toggle.call(this, false, passive);\n            return;\n        }\n\n        if (!is.number(index)) {\n            this.debug.warn('Invalid caption argument', index);\n            return;\n        }\n\n        if (!(index in tracks)) {\n            this.debug.warn('Track not found', index);\n            return;\n        }\n\n        if (this.captions.currentTrack !== index) {\n            this.captions.currentTrack = index;\n            const track = tracks[index];\n            const { language } = track || {};\n\n            // Store reference to node for invalidation on remove\n            this.captions.currentTrackNode = track;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.language = language;\n                this.storage.set({ language });\n            }\n\n            // Handle Vimeo captions\n            if (this.isVimeo) {\n                this.embed.enableTextTrack(language);\n            }\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'languagechange');\n        }\n\n        // Show captions\n        captions.toggle.call(this, true, passive);\n\n        if (this.isHTML5 && this.isVideo) {\n            // If we change the active track while a cue is already displayed we need to update it\n            captions.updateCues.call(this);\n        }\n    },\n\n    // Set captions by language\n    // Used internally for the language setter with the passive option forced to false\n    setLanguage(input, passive = true) {\n        if (!is.string(input)) {\n            this.debug.warn('Invalid language argument', input);\n            return;\n        }\n        // Normalize\n        const language = input.toLowerCase();\n        this.captions.language = language;\n\n        // Set currentTrack\n        const tracks = captions.getTracks.call(this);\n        const track = captions.findTrack.call(this, [language]);\n        captions.set.call(this, tracks.indexOf(track), passive);\n    },\n\n    // Get current valid caption tracks\n    // If update is false it will also ignore tracks without metadata\n    // This is used to \"freeze\" the language options when captions.update is false\n    getTracks(update = false) {\n        // Handle media or textTracks missing or null\n        const tracks = Array.from((this.media || {}).textTracks || []);\n        // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n        // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n        return tracks\n            .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n            .filter(track => ['captions', 'subtitles'].includes(track.kind));\n    },\n\n    // Match tracks based on languages and get the first\n    findTrack(languages, force = false) {\n        const tracks = captions.getTracks.call(this);\n        const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n        const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n        let track;\n        languages.every(language => {\n            track = sorted.find(track => track.language === language);\n            return !track; // Break iteration if there is a match\n        });\n        // If no match is found but is required, get first\n        return track || (force ? sorted[0] : undefined);\n    },\n\n    // Get the current track\n    getCurrentTrack() {\n        return captions.getTracks.call(this)[this.currentTrack];\n    },\n\n    // Get UI label for track\n    getLabel(track) {\n        let currentTrack = track;\n\n        if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n            currentTrack = captions.getCurrentTrack.call(this);\n        }\n\n        if (is.track(currentTrack)) {\n            if (!is.empty(currentTrack.label)) {\n                return currentTrack.label;\n            }\n\n            if (!is.empty(currentTrack.language)) {\n                return track.language.toUpperCase();\n            }\n\n            return i18n.get('enabled', this.config);\n        }\n\n        return i18n.get('disabled', this.config);\n    },\n\n    // Update captions using current track's active cues\n    // Also optional array argument in case there isn't any track (ex: vimeo)\n    updateCues(input) {\n        // Requires UI\n        if (!this.supported.ui) {\n            return;\n        }\n\n        if (!is.element(this.elements.captions)) {\n            this.debug.warn('No captions element to render to');\n            return;\n        }\n\n        // Only accept array or empty input\n        if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n            this.debug.warn('updateCues: Invalid input', input);\n            return;\n        }\n\n        let cues = input;\n\n        // Get cues from track\n        if (!cues) {\n            const track = captions.getCurrentTrack.call(this);\n            cues = Array.from((track || {}).activeCues || [])\n                .map(cue => cue.getCueAsHTML())\n                .map(getHTML);\n        }\n\n        // Set new caption text\n        const content = cues.map(cueText => cueText.trim()).join('\\n');\n        const changed = content !== this.elements.captions.innerHTML;\n\n        if (changed) {\n            // Empty the container and create a new child element\n            emptyElement(this.elements.captions);\n            const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n            caption.innerHTML = content;\n            this.elements.captions.appendChild(caption);\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'cuechange');\n        }\n    },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n    // Disable\n    enabled: true,\n\n    // Custom media title\n    title: '',\n\n    // Logging to console\n    debug: false,\n\n    // Auto play (if supported)\n    autoplay: false,\n\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n\n    // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n    // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n    playsinline: true,\n\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n\n    // Default volume\n    volume: 1,\n    muted: false,\n\n    // Pass a custom duration\n    duration: null,\n\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n\n    // Invert the current time to be a countdown\n    invertTime: true,\n\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n\n    // Aspect ratio (for embeds)\n    ratio: '16:9',\n\n    // Click video container to play/pause\n    clickToPlay: true,\n\n    // Auto hide the controls\n    hideControls: true,\n\n    // Reset to start when playback ended\n    resetOnEnd: false,\n\n    // Disable the standard context menu\n    disableContextMenu: true,\n\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.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: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n    },\n\n    // Set loops\n    loop: {\n        active: false,\n        // start: null,\n        // end: null,\n    },\n\n    // Speed default and options to display\n    speed: {\n        selected: 1,\n        options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n    },\n\n    // Keyboard shortcut settings\n    keyboard: {\n        focused: true,\n        global: false,\n    },\n\n    // Display tooltips\n    tooltips: {\n        controls: false,\n        seek: true,\n    },\n\n    // Captions settings\n    captions: {\n        active: false,\n        language: 'auto',\n        // Listen to new tracks added after Plyr is initialized.\n        // This is needed for streaming captions, but may result in unselectable options\n        update: false,\n    },\n\n    // Fullscreen settings\n    fullscreen: {\n        enabled: true, // Allow fullscreen?\n        fallback: true, // Fallback for vintage browsers\n        iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n    },\n\n    // Local storage\n    storage: {\n        enabled: true,\n        key: 'plyr',\n    },\n\n    // Default controls\n    controls: [\n        'play-large',\n        // 'restart',\n        // 'rewind',\n        'play',\n        // 'fast-forward',\n        'progress',\n        'current-time',\n        'mute',\n        'volume',\n        'captions',\n        'settings',\n        'pip',\n        'airplay',\n        'fullscreen',\n    ],\n    settings: ['captions', 'quality', 'speed'],\n\n    // Localisation\n    i18n: {\n        restart: 'Restart',\n        rewind: 'Rewind {seektime}s',\n        play: 'Play',\n        pause: 'Pause',\n        fastForward: 'Forward {seektime}s',\n        seek: 'Seek',\n        seekLabel: '{currentTime} of {duration}',\n        played: 'Played',\n        buffered: 'Buffered',\n        currentTime: 'Current time',\n        duration: 'Duration',\n        volume: 'Volume',\n        mute: 'Mute',\n        unmute: 'Unmute',\n        enableCaptions: 'Enable captions',\n        disableCaptions: 'Disable captions',\n        enterFullscreen: 'Enter fullscreen',\n        exitFullscreen: 'Exit fullscreen',\n        frameTitle: 'Player for {title}',\n        captions: 'Captions',\n        settings: 'Settings',\n        menuBack: 'Go back to previous menu',\n        speed: 'Speed',\n        normal: 'Normal',\n        quality: 'Quality',\n        loop: 'Loop',\n        start: 'Start',\n        end: 'End',\n        all: 'All',\n        reset: 'Reset',\n        disabled: 'Disabled',\n        enabled: 'Enabled',\n        advertisement: 'Ad',\n        qualityBadge: {\n            2160: '4K',\n            1440: 'HD',\n            1080: 'HD',\n            720: 'HD',\n            576: 'SD',\n            480: 'SD',\n        },\n    },\n\n    // URLs\n    urls: {\n        vimeo: {\n            sdk: 'https://player.vimeo.com/api/player.js',\n            iframe: 'https://player.vimeo.com/video/{0}?{1}',\n            api: 'https://vimeo.com/api/v2/video/{0}.json',\n        },\n        youtube: {\n            sdk: 'https://www.youtube.com/iframe_api',\n            api:\n                'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n        },\n        googleIMA: {\n            sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n        },\n    },\n\n    // Custom control listeners\n    listeners: {\n        seek: null,\n        play: null,\n        pause: null,\n        restart: null,\n        rewind: null,\n        fastForward: null,\n        mute: null,\n        volume: null,\n        captions: null,\n        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\n        // Quality\n        'qualitychange',\n\n        // Ads\n        'adsloaded',\n        'adscontentpause',\n        'adscontentresume',\n        'adstarted',\n        'adsmidpoint',\n        'adscomplete',\n        'adsallcomplete',\n        'adsimpression',\n        'adsclick',\n    ],\n\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n        editable: 'input, textarea, select, [contenteditable]',\n        container: '.plyr',\n        controls: {\n            container: null,\n            wrapper: '.plyr__controls',\n        },\n        labels: '[data-plyr]',\n        buttons: {\n            play: '[data-plyr=\"play\"]',\n            pause: '[data-plyr=\"pause\"]',\n            restart: '[data-plyr=\"restart\"]',\n            rewind: '[data-plyr=\"rewind\"]',\n            fastForward: '[data-plyr=\"fast-forward\"]',\n            mute: '[data-plyr=\"mute\"]',\n            captions: '[data-plyr=\"captions\"]',\n            fullscreen: '[data-plyr=\"fullscreen\"]',\n            pip: '[data-plyr=\"pip\"]',\n            airplay: '[data-plyr=\"airplay\"]',\n            settings: '[data-plyr=\"settings\"]',\n            loop: '[data-plyr=\"loop\"]',\n        },\n        inputs: {\n            seek: '[data-plyr=\"seek\"]',\n            volume: '[data-plyr=\"volume\"]',\n            speed: '[data-plyr=\"speed\"]',\n            language: '[data-plyr=\"language\"]',\n            quality: '[data-plyr=\"quality\"]',\n        },\n        display: {\n            currentTime: '.plyr__time--current',\n            duration: '.plyr__time--duration',\n            buffer: '.plyr__progress__buffer',\n            loop: '.plyr__progress__loop', // Used later\n            volume: '.plyr__volume--display',\n        },\n        progress: '.plyr__progress',\n        captions: '.plyr__captions',\n        caption: '.plyr__caption',\n        menu: {\n            quality: '.js-plyr__menu__list--quality',\n        },\n    },\n\n    // Class hooks added to the player in different states\n    classNames: {\n        type: 'plyr--{0}',\n        provider: 'plyr--{0}',\n        video: 'plyr__video-wrapper',\n        embed: 'plyr__video-embed',\n        embedContainer: 'plyr__video-embed__container',\n        poster: 'plyr__poster',\n        posterEnabled: 'plyr__poster-enabled',\n        ads: 'plyr__ads',\n        control: 'plyr__control',\n        controlPressed: 'plyr__control--pressed',\n        playing: 'plyr--playing',\n        paused: 'plyr--paused',\n        stopped: 'plyr--stopped',\n        loading: 'plyr--loading',\n        hover: 'plyr--hover',\n        tooltip: 'plyr__tooltip',\n        cues: 'plyr__cues',\n        hidden: 'plyr__sr-only',\n        hideControls: 'plyr--hide-controls',\n        isIos: 'plyr--is-ios',\n        isTouch: 'plyr--is-touch',\n        uiSupported: 'plyr--full-ui',\n        noTransition: 'plyr--no-transition',\n        display: {\n            time: 'plyr__time',\n        },\n        menu: {\n            value: 'plyr__menu__value',\n            badge: 'plyr__badge',\n            open: 'plyr--menu-open',\n        },\n        captions: {\n            enabled: 'plyr--captions-enabled',\n            active: 'plyr--captions-active',\n        },\n        fullscreen: {\n            enabled: 'plyr--fullscreen-enabled',\n            fallback: 'plyr--fullscreen-fallback',\n        },\n        pip: {\n            supported: 'plyr--pip-supported',\n            active: 'plyr--pip-active',\n        },\n        airplay: {\n            supported: 'plyr--airplay-supported',\n            active: 'plyr--airplay-active',\n        },\n        tabFocus: 'plyr__tab-focus',\n    },\n\n    // Embed attributes\n    attributes: {\n        embed: {\n            provider: 'data-plyr-provider',\n            id: 'data-plyr-embed-id',\n        },\n    },\n\n    // API keys\n    keys: {\n        google: null,\n    },\n\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n        enabled: false,\n        publisherId: '',\n    },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo',\n};\n\nexport const types = {\n    audio: 'audio',\n    video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {string} url\n */\nexport function getProviderByUrl(url) {\n    // YouTube\n    if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n        return providers.youtube;\n    }\n\n    // Vimeo\n    if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n        return providers.vimeo;\n    }\n\n    return null;\n}\n\nexport default { providers, types };\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n    constructor(enabled = false) {\n        this.enabled = window.console && enabled;\n\n        if (this.enabled) {\n            this.log('Debugging enabled');\n        }\n    }\n\n    get log() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n\n    get warn() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n\n    get error() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n    if (!this.enabled) {\n        return;\n    }\n\n    // Update toggle button\n    const button = this.player.elements.buttons.fullscreen;\n    if (is.element(button)) {\n        button.pressed = this.active;\n    }\n\n    // Trigger an event\n    triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n    // Trap focus in container\n    if (!browser.isIos) {\n        trapFocus.call(this.player, this.target, this.active);\n    }\n}\n\nfunction toggleFallback(toggle = false) {\n    // Store or restore scroll position\n    if (toggle) {\n        this.scrollPosition = {\n            x: window.scrollX || 0,\n            y: window.scrollY || 0,\n        };\n    } else {\n        window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    }\n\n    // Toggle scroll\n    document.body.style.overflow = toggle ? 'hidden' : '';\n\n    // Toggle class hook\n    toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n    // Force full viewport on iPhone X+\n    if (browser.isIos) {\n        let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n        const property = 'viewport-fit=cover';\n\n        // Inject the viewport meta if required\n        if (!viewport) {\n            viewport = document.createElement('meta');\n            viewport.setAttribute('name', 'viewport');\n        }\n\n        // Check if the property already exists\n        const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n        if (toggle) {\n            this.cleanupViewport = !hasProperty;\n\n            if (!hasProperty) {\n                viewport.content += `,${property}`;\n            }\n        } else if (this.cleanupViewport) {\n            viewport.content = viewport.content\n                .split(',')\n                .filter(part => part.trim() !== property)\n                .join(',');\n        }\n\n        // Force a repaint as sometimes Safari doesn't want to fill the screen\n        setTimeout(() => repaint(this.target), 100);\n    }\n\n    // Toggle button and fire events\n    onChange.call(this);\n}\n\nclass Fullscreen {\n    constructor(player) {\n        // Keep reference to parent\n        this.player = player;\n\n        // Get prefix\n        this.prefix = Fullscreen.prefix;\n        this.property = Fullscreen.property;\n\n        // Scroll position\n        this.scrollPosition = { x: 0, y: 0 };\n\n        // Register event listeners\n        // Handle event (incase user presses escape etc)\n        on.call(\n            this.player,\n            document,\n            this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n            () => {\n                // TODO: Filter for target??\n                onChange.call(this);\n            },\n        );\n\n        // Fullscreen toggle on double click\n        on.call(this.player, this.player.elements.container, 'dblclick', event => {\n            // Ignore double click in controls\n            if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n                return;\n            }\n\n            this.toggle();\n        });\n\n        // Update the UI\n        this.update();\n    }\n\n    // Determine if native supported\n    static get native() {\n        return !!(\n            document.fullscreenEnabled ||\n            document.webkitFullscreenEnabled ||\n            document.mozFullScreenEnabled ||\n            document.msFullscreenEnabled\n        );\n    }\n\n    // Get the prefix for handlers\n    static get prefix() {\n        // No prefix\n        if (is.function(document.exitFullscreen)) {\n            return '';\n        }\n\n        // Check for fullscreen support by vendor prefix\n        let value = '';\n        const prefixes = ['webkit', 'moz', 'ms'];\n\n        prefixes.some(pre => {\n            if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n                value = pre;\n                return true;\n            }\n\n            return false;\n        });\n\n        return value;\n    }\n\n    static get property() {\n        return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n    }\n\n    // Determine if fullscreen is enabled\n    get enabled() {\n        return (\n            (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n            this.player.config.fullscreen.enabled &&\n            this.player.supported.ui &&\n            this.player.isVideo\n        );\n    }\n\n    // Get active state\n    get active() {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Fallback using classname\n        if (!Fullscreen.native) {\n            return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n        return element === this.target;\n    }\n\n    // Get target element\n    get target() {\n        return browser.isIos && this.player.config.fullscreen.iosNative\n            ? this.player.media\n            : this.player.elements.container;\n    }\n\n    // Update UI\n    update() {\n        if (this.enabled) {\n            this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n        } else {\n            this.player.debug.log('Fullscreen not supported and fallback disabled');\n        }\n\n        // Add styling hook to show button\n        toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    }\n\n    // Make an element fullscreen\n    enter() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen doesn't need the request step\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitEnterFullscreen();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n            this.target.requestFullscreen();\n        } else if (!is.empty(this.prefix)) {\n            this.target[`${this.prefix}Request${this.property}`]();\n        }\n    }\n\n    // Bail from fullscreen\n    exit() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitExitFullscreen();\n            this.player.play();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n            (document.cancelFullScreen || document.exitFullscreen).call(document);\n        } else if (!is.empty(this.prefix)) {\n            const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n            document[`${this.prefix}${action}${this.property}`]();\n        }\n    }\n\n    // Toggle state\n    toggle() {\n        if (!this.active) {\n            this.enter();\n        } else {\n            this.exit();\n        }\n    }\n}\n\nexport default Fullscreen;\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n    return new Promise((resolve, reject) => {\n        const image = new Image();\n\n        const handler = () => {\n            delete image.onload;\n            delete image.onerror;\n            (image.naturalWidth >= minWidth ? resolve : reject)(image);\n        };\n\n        Object.assign(image, { onload: handler, onerror: handler, src });\n    });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n    addStyleHook() {\n        toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n        toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n\n    // Toggle native HTML5 media controls\n    toggleNativeControls(toggle = false) {\n        if (toggle && this.isHTML5) {\n            this.media.setAttribute('controls', '');\n        } else {\n            this.media.removeAttribute('controls');\n        }\n    },\n\n    // Setup the UI\n    build() {\n        // Re-attach media element listeners\n        // TODO: Use event bubbling?\n        this.listeners.media();\n\n        // Don't setup interface if no support\n        if (!this.supported.ui) {\n            this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n            // Restore native controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Bail\n            return;\n        }\n\n        // Inject custom controls if not present\n        if (!is.element(this.elements.controls)) {\n            // Inject custom controls\n            controls.inject.call(this);\n\n            // Re-attach control listeners\n            this.listeners.controls();\n        }\n\n        // Remove native controls\n        ui.toggleNativeControls.call(this);\n\n        // Setup captions for HTML5\n        if (this.isHTML5) {\n            captions.setup.call(this);\n        }\n\n        // Reset volume\n        this.volume = null;\n\n        // Reset mute state\n        this.muted = null;\n\n        // Reset speed\n        this.speed = null;\n\n        // Reset loop state\n        this.loop = null;\n\n        // Reset quality setting\n        this.quality = null;\n\n        // Reset volume display\n        controls.updateVolume.call(this);\n\n        // Reset time display\n        controls.timeUpdate.call(this);\n\n        // Update the UI\n        ui.checkPlaying.call(this);\n\n        // Check for picture-in-picture support\n        toggleClass(\n            this.elements.container,\n            this.config.classNames.pip.supported,\n            support.pip && this.isHTML5 && this.isVideo,\n        );\n\n        // Check for airplay support\n        toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n        // Add iOS class\n        toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n        // Add touch class\n        toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n        // Ready for API calls\n        this.ready = true;\n\n        // Ready event at end of execution stack\n        setTimeout(() => {\n            triggerEvent.call(this, this.media, 'ready');\n        }, 0);\n\n        // Set the title\n        ui.setTitle.call(this);\n\n        // Assure the poster image is set, if the property was added before the element was created\n        if (this.poster) {\n            ui.setPoster.call(this, this.poster, false).catch(() => {});\n        }\n\n        // Manually set the duration if user has overridden it.\n        // The event listeners for it doesn't get called if preload is disabled (#701)\n        if (this.config.duration) {\n            controls.durationUpdate.call(this);\n        }\n    },\n\n    // Setup aria attribute for play and iframe title\n    setTitle() {\n        // Find the current text\n        let label = i18n.get('play', this.config);\n\n        // If there's a media title set, use that for the label\n        if (is.string(this.config.title) && !is.empty(this.config.title)) {\n            label += `, ${this.config.title}`;\n        }\n\n        // If there's a play button, set label\n        Array.from(this.elements.buttons.play || []).forEach(button => {\n            button.setAttribute('aria-label', label);\n        });\n\n        // Set iframe title\n        // https://github.com/sampotts/plyr/issues/124\n        if (this.isEmbed) {\n            const iframe = getElement.call(this, 'iframe');\n\n            if (!is.element(iframe)) {\n                return;\n            }\n\n            // Default to media type\n            const title = !is.empty(this.config.title) ? this.config.title : 'video';\n            const format = i18n.get('frameTitle', this.config);\n\n            iframe.setAttribute('title', format.replace('{title}', title));\n        }\n    },\n\n    // Toggle poster\n    togglePoster(enable) {\n        toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n    },\n\n    // Set the poster image (async)\n    // Used internally for the poster setter, with the passive option forced to false\n    setPoster(poster, passive = true) {\n        // Don't override if call is passive\n        if (passive && this.poster) {\n            return Promise.reject(new Error('Poster already set'));\n        }\n\n        // Set property synchronously to respect the call order\n        this.media.setAttribute('poster', poster);\n\n        // Wait until ui is ready\n        return (\n            ready\n                .call(this)\n                // Load image\n                .then(() => loadImage(poster))\n                .catch(err => {\n                    // Hide poster on error unless it's been set by another call\n                    if (poster === this.poster) {\n                        ui.togglePoster.call(this, false);\n                    }\n                    // Rethrow\n                    throw err;\n                })\n                .then(() => {\n                    // Prevent race conditions\n                    if (poster !== this.poster) {\n                        throw new Error('setPoster cancelled by later call to setPoster');\n                    }\n                })\n                .then(() => {\n                    Object.assign(this.elements.poster.style, {\n                        backgroundImage: `url('${poster}')`,\n                        // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n                        backgroundSize: '',\n                    });\n                    ui.togglePoster.call(this, true);\n                    return poster;\n                })\n        );\n    },\n\n    // Check playing state\n    checkPlaying(event) {\n        // Class hooks\n        toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n        toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n        toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n        // Set state\n        Array.from(this.elements.buttons.play || []).forEach(target => {\n            target.pressed = this.playing;\n        });\n\n        // Only update controls on non timeupdate events\n        if (is.event(event) && event.type === 'timeupdate') {\n            return;\n        }\n\n        // Toggle controls\n        ui.toggleControls.call(this);\n    },\n\n    // Check if media is loading\n    checkLoading(event) {\n        this.loading = ['stalled', 'waiting'].includes(event.type);\n\n        // Clear timer\n        clearTimeout(this.timers.loading);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Update progress bar loading class state\n            toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Update controls visibility\n            ui.toggleControls.call(this);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Toggle controls based on state and `force` argument\n    toggleControls(force) {\n        const { controls } = this.elements;\n\n        if (controls && this.config.hideControls) {\n            // 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 { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n    constructor(player) {\n        this.player = player;\n        this.lastKey = null;\n        this.focusTimer = null;\n        this.lastKeyDown = null;\n\n        this.handleKey = this.handleKey.bind(this);\n        this.toggleMenu = this.toggleMenu.bind(this);\n        this.setTabFocus = this.setTabFocus.bind(this);\n        this.firstTouch = this.firstTouch.bind(this);\n    }\n\n    // Handle key presses\n    handleKey(event) {\n        const { player } = this;\n        const { elements } = player;\n        const code = event.keyCode ? event.keyCode : event.which;\n        const pressed = event.type === 'keydown';\n        const repeat = pressed && code === this.lastKey;\n\n        // Bail if a modifier key is set\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n\n        // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n        if (!is.number(code)) {\n            return;\n        }\n\n        // Seek by the number keys\n        const seekByKey = () => {\n            // Divide the max duration into 10th's and times by the number value\n            player.currentTime = (player.duration / 10) * (code - 48);\n        };\n\n        // Handle the key on keydown\n        // Reset on keyup\n        if (pressed) {\n            // Check focused element\n            // and if the focused element is not editable (e.g. text input)\n            // and any that accept key input http://webaim.org/techniques/keyboard/\n            const focused = document.activeElement;\n            if (is.element(focused)) {\n                const { editable } = player.config.selectors;\n                const { seek } = elements.inputs;\n\n                if (focused !== seek && matches(focused, editable)) {\n                    return;\n                }\n\n                if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n                    return;\n                }\n            }\n\n            // Which keycodes should we prevent default\n            const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n            // If the code is found prevent default (e.g. prevent scrolling for arrows)\n            if (preventDefault.includes(code)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            switch (code) {\n                case 48:\n                case 49:\n                case 50:\n                case 51:\n                case 52:\n                case 53:\n                case 54:\n                case 55:\n                case 56:\n                case 57:\n                    // 0-9\n                    if (!repeat) {\n                        seekByKey();\n                    }\n                    break;\n\n                case 32:\n                case 75:\n                    // Space and K key\n                    if (!repeat) {\n                        player.togglePlay();\n                    }\n                    break;\n\n                case 38:\n                    // Arrow up\n                    player.increaseVolume(0.1);\n                    break;\n\n                case 40:\n                    // Arrow down\n                    player.decreaseVolume(0.1);\n                    break;\n\n                case 77:\n                    // M key\n                    if (!repeat) {\n                        player.muted = !player.muted;\n                    }\n                    break;\n\n                case 39:\n                    // Arrow forward\n                    player.forward();\n                    break;\n\n                case 37:\n                    // Arrow back\n                    player.rewind();\n                    break;\n\n                case 70:\n                    // F key\n                    player.fullscreen.toggle();\n                    break;\n\n                case 67:\n                    // C key\n                    if (!repeat) {\n                        player.toggleCaptions();\n                    }\n                    break;\n\n                case 76:\n                    // L key\n                    player.loop = !player.loop;\n                    break;\n\n                    /* 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 (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n                player.fullscreen.toggle();\n            }\n\n            // Store last code for next cycle\n            this.lastKey = code;\n        } else {\n            this.lastKey = null;\n        }\n    }\n\n    // Toggle menu\n    toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n    }\n\n    // Device is touch enabled\n    firstTouch() {\n        const { player } = this;\n        const { elements } = player;\n\n        player.touch = true;\n\n        // Add touch class\n        toggleClass(elements.container, player.config.classNames.isTouch, true);\n    }\n\n    setTabFocus(event) {\n        const { player } = this;\n        const { elements } = player;\n\n        clearTimeout(this.focusTimer);\n\n        // Ignore any key other than tab\n        if (event.type === 'keydown' && event.which !== 9) {\n            return;\n        }\n\n        // Store reference to event timeStamp\n        if (event.type === 'keydown') {\n            this.lastKeyDown = event.timeStamp;\n        }\n\n        // Remove current classes\n        const removeCurrent = () => {\n            const className = player.config.classNames.tabFocus;\n            const current = getElements.call(player, `.${className}`);\n            toggleClass(current, className, false);\n        };\n\n        // Determine if a key was pressed to trigger this event\n        const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n        // Ignore focus events if a key was pressed prior\n        if (event.type === 'focus' && !wasKeyDown) {\n            return;\n        }\n\n        // Remove all current\n        removeCurrent();\n\n        // Delay the adding of classname until the focus has changed\n        // This event fires before the focusin event\n        this.focusTimer = setTimeout(() => {\n            const focused = document.activeElement;\n\n            // Ignore if current focus element isn't inside the player\n            if (!elements.container.contains(focused)) {\n                return;\n            }\n\n            toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n        }, 10);\n    }\n\n    // Global window & document listeners\n    global(toggle = true) {\n        const { player } = this;\n\n        // Keyboard shortcuts\n        if (player.config.keyboard.global) {\n            toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n        }\n\n        // Click anywhere closes menu\n        toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n        // Detect touch by events\n        once.call(player, document.body, 'touchstart', this.firstTouch);\n\n        // Tab focus detection\n        toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n    }\n\n    // Container listeners\n    container() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Keyboard shortcuts\n        if (!player.config.keyboard.global && player.config.keyboard.focused) {\n            on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n        }\n\n        // Toggle controls on mouse events and entering fullscreen\n        on.call(\n            player,\n            elements.container,\n            'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n            event => {\n                const { controls } = elements;\n\n                // Remove button states for fullscreen\n                if (controls && event.type === 'enterfullscreen') {\n                    controls.pressed = false;\n                    controls.hover = false;\n                }\n\n                // Show, then hide after a timeout unless another control event occurs\n                const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n                let delay = 0;\n\n                if (show) {\n                    ui.toggleControls.call(player, true);\n                    // Use longer timeout for touch devices\n                    delay = player.touch ? 3000 : 2000;\n                }\n\n                // Clear timer\n                clearTimeout(player.timers.controls);\n\n                // Set new timer to prevent flicker when seeking\n                player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            },\n        );\n    }\n\n    // Listen for media events\n    media() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Time change on media\n        on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n        // Display duration\n        on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n            controls.durationUpdate.call(player, event),\n        );\n\n        // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n        on.call(player, player.media, 'canplay', () => {\n            toggleHidden(elements.volume, !player.hasAudio);\n            toggleHidden(elements.buttons.mute, !player.hasAudio);\n        });\n\n        // Handle the media finishing\n        on.call(player, player.media, 'ended', () => {\n            // Show poster on end\n            if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n                // Restart\n                player.restart();\n            }\n        });\n\n        // Check for buffer progress\n        on.call(player, player.media, 'progress playing seeking seeked', event =>\n            controls.updateProgress.call(player, event),\n        );\n\n        // Handle volume changes\n        on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n        // Handle play/pause\n        on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n            ui.checkPlaying.call(player, event),\n        );\n\n        // Loading state\n        on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n        // If autoplay, then load advertisement if required\n        // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n        on.call(player, player.media, 'playing', () => {\n            if (!player.ads) {\n                return;\n            }\n\n            // If ads are enabled, wait for them first\n            if (player.ads.enabled && !player.ads.initialized) {\n                // Wait for manager response\n                player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n            }\n        });\n\n        // Click video\n        if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n            // Re-fetch the wrapper\n            const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n            // Bail if there's no wrapper (this should never happen)\n            if (!is.element(wrapper)) {\n                return;\n            }\n\n            // On click play, pause ore restart\n            on.call(player, elements.container, 'click', event => {\n                const targets = [elements.container, wrapper];\n\n                // Ignore if click if not container or in video wrapper\n                if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n                    return;\n                }\n\n                // Touch devices will just show controls (if hidden)\n                if (player.touch && player.config.hideControls) {\n                    return;\n                }\n\n                if (player.ended) {\n                    player.restart();\n                    player.play();\n                } else {\n                    player.togglePlay();\n                }\n            });\n        }\n\n        // Disable right click\n        if (player.supported.ui && player.config.disableContextMenu) {\n            on.call(\n                player,\n                elements.wrapper,\n                'contextmenu',\n                event => {\n                    event.preventDefault();\n                },\n                false,\n            );\n        }\n\n        // Volume change\n        on.call(player, player.media, 'volumechange', () => {\n            // Save to storage\n            player.storage.set({\n                volume: player.volume,\n                muted: player.muted,\n            });\n        });\n\n        // Speed change\n        on.call(player, player.media, 'ratechange', () => {\n            // Update UI\n            controls.updateSetting.call(player, 'speed');\n\n            // Save to storage\n            player.storage.set({ speed: player.speed });\n        });\n\n        // Quality change\n        on.call(player, player.media, 'qualitychange', event => {\n            // Update UI\n            controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n        });\n\n        // Proxy events to container\n        // Bubble up key events for Edge\n        const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n        on.call(player, player.media, proxyEvents, event => {\n            let { detail = {} } = event;\n\n            // Get error details from media\n            if (event.type === 'error') {\n                detail = player.media.error;\n            }\n\n            triggerEvent.call(player, elements.container, event.type, true, detail);\n        });\n    }\n\n    // Run default and custom handlers\n    proxy(event, defaultHandler, customHandlerKey) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n        let returned = true;\n\n        // Execute custom handler\n        if (hasCustomHandler) {\n            returned = customHandler.call(player, event);\n        }\n\n        // Only call default handler if not prevented in custom handler\n        if (returned && is.function(defaultHandler)) {\n            defaultHandler.call(player, event);\n        }\n    }\n\n    // Trigger custom and default handlers\n    bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n\n        on.call(\n            player,\n            element,\n            type,\n            event => this.proxy(event, defaultHandler, customHandlerKey),\n            passive && !hasCustomHandler,\n        );\n    }\n\n    // Listen for control events\n    controls() {\n        const { player } = this;\n        const { elements } = player;\n\n        // IE doesn't support input event, so we fallback to change\n        const inputEvent = browser.isIE ? 'change' : 'input';\n\n        // Play/pause toggle\n        if (elements.buttons.play) {\n            Array.from(elements.buttons.play).forEach(button => {\n                this.bind(button, 'click', player.togglePlay, 'play');\n            });\n        }\n\n        // Pause\n        this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n        // Rewind\n        this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n        // Rewind\n        this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n        // Mute toggle\n        this.bind(\n            elements.buttons.mute,\n            'click',\n            () => {\n                player.muted = !player.muted;\n            },\n            'mute',\n        );\n\n        // Captions toggle\n        this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n        // Fullscreen toggle\n        this.bind(\n            elements.buttons.fullscreen,\n            'click',\n            () => {\n                player.fullscreen.toggle();\n            },\n            'fullscreen',\n        );\n\n        // Picture-in-Picture\n        this.bind(\n            elements.buttons.pip,\n            'click',\n            () => {\n                player.pip = 'toggle';\n            },\n            'pip',\n        );\n\n        // Airplay\n        this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n        // Settings menu - click toggle\n        this.bind(elements.buttons.settings, 'click', event => {\n            // Prevent the document click listener closing the menu\n            event.stopPropagation();\n\n            controls.toggleMenu.call(player, event);\n        });\n\n        // Settings menu - keyboard toggle\n        // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n        this.bind(\n            elements.buttons.settings,\n            'keyup',\n            event => {\n                const code = event.which;\n\n                // We only care about space and return\n                if (![13, 32].includes(code)) {\n                    return;\n                }\n\n                // Because return triggers a click anyway, all we need to do is set focus\n                if (code === 13) {\n                    controls.focusFirstMenuItem.call(player, null, true);\n                    return;\n                }\n\n                // Prevent scroll\n                event.preventDefault();\n\n                // Prevent playing video (Firefox)\n                event.stopPropagation();\n\n                // Toggle menu\n                controls.toggleMenu.call(player, event);\n            },\n            null,\n            false, // Can't be passive as we're preventing default\n        );\n\n        // Escape closes menu\n        this.bind(elements.settings.menu, 'keydown', event => {\n            if (event.which === 27) {\n                controls.toggleMenu.call(player, event);\n            }\n        });\n\n        // Set range input alternative \"value\", which matches the tooltip time (#954)\n        this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n            const rect = elements.progress.getBoundingClientRect();\n            const percent = (100 / rect.width) * (event.pageX - rect.left);\n            event.currentTarget.setAttribute('seek-value', percent);\n        });\n\n        // Pause while seeking\n        this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n            const seek = event.currentTarget;\n            const code = event.keyCode ? event.keyCode : event.which;\n            const attribute = 'play-on-seeked';\n\n            if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n                return;\n            }\n\n            // Was playing before?\n            const play = seek.hasAttribute(attribute);\n\n            // Done seeking\n            const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n            // If we're done seeking and it was playing, resume playback\n            if (play && done) {\n                seek.removeAttribute(attribute);\n                player.play();\n            } else if (!done && player.playing) {\n                seek.setAttribute(attribute, '');\n                player.pause();\n            }\n        });\n\n        // Fix range inputs on iOS\n        // Super weird iOS bug where after you interact with an <input type=\"range\">,\n        // it takes over further interactions on the page. This is a hack\n        if (browser.isIos) {\n            const inputs = getElements.call(player, 'input[type=\"range\"]');\n            Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n        }\n\n        // Seek\n        this.bind(\n            elements.inputs.seek,\n            inputEvent,\n            event => {\n                const seek = event.currentTarget;\n\n                // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n                let seekTo = seek.getAttribute('seek-value');\n\n                if (is.empty(seekTo)) {\n                    seekTo = seek.value;\n                }\n\n                seek.removeAttribute('seek-value');\n\n                player.currentTime = (seekTo / seek.max) * player.duration;\n            },\n            'seek',\n        );\n\n        // Seek tooltip\n        this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n            controls.updateSeekTooltip.call(player, event),\n        );\n\n        // Polyfill for lower fill in <input type=\"range\"> for webkit\n        if (browser.isWebkit) {\n            Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n                this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n            });\n        }\n\n        // Current time invert\n        // Only if one time element is used for both currentTime and duration\n        if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n            this.bind(elements.display.currentTime, 'click', () => {\n                // Do nothing if we're at the start\n                if (player.currentTime === 0) {\n                    return;\n                }\n\n                player.config.invertTime = !player.config.invertTime;\n\n                controls.timeUpdate.call(player);\n            });\n        }\n\n        // Volume\n        this.bind(\n            elements.inputs.volume,\n            inputEvent,\n            event => {\n                player.volume = event.target.value;\n            },\n            'volume',\n        );\n\n        // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mouseenter mouseleave', event => {\n            elements.controls.hover = !player.touch && event.type === 'mouseenter';\n        });\n\n        // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n            elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n        });\n\n        // Focus in/out on controls\n        this.bind(elements.controls, 'focusin focusout', event => {\n            const { config, elements, timers } = player;\n            const isFocusIn = event.type === 'focusin';\n\n            // Skip transition to prevent focus from scrolling the parent element\n            toggleClass(elements.controls, config.classNames.noTransition, isFocusIn);\n\n            // Toggle\n            ui.toggleControls.call(player, isFocusIn);\n\n            // If focusin, hide again after delay\n            if (isFocusIn) {\n                // Restore transition\n                setTimeout(() => {\n                    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\n                // Hide\n                timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            }\n        });\n\n        // Mouse wheel for volume\n        this.bind(\n            elements.inputs.volume,\n            'wheel',\n            event => {\n                // Detect \"natural\" scroll - suppored on OS X Safari only\n                // Other browsers on OS X will be inverted until support improves\n                const inverted = event.webkitDirectionInvertedFromDevice;\n\n                // Get delta from event. Invert if `inverted` is true\n                const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n                // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n                const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n                // Change the volume by 2%\n                player.increaseVolume(direction / 50);\n\n                // Don't break page scrolling at max and min\n                const { volume } = player.media;\n                if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n                    event.preventDefault();\n                }\n            },\n            'volume',\n            false,\n        );\n    }\n}\n\nexport default Listeners;\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n","(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.loadjs = factory();\n  }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n    bundleIdCache = {},\n    bundleResultCache = {},\n    bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n  // listify\n  bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n  var depsNotFound = [],\n      i = bundleIds.length,\n      numWaiting = i,\n      fn,\n      bundleId,\n      r,\n      q;\n\n  // define callback function\n  fn = function (bundleId, pathsNotFound) {\n    if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(depsNotFound);\n  };\n\n  // register callback\n  while (i--) {\n    bundleId = bundleIds[i];\n\n    // execute callback if in result cache\n    r = bundleResultCache[bundleId];\n    if (r) {\n      fn(bundleId, r);\n      continue;\n    }\n\n    // add to callback queue\n    q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n    q.push(fn);\n  }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n  // exit if id isn't defined\n  if (!bundleId) return;\n\n  var q = bundleCallbackQueue[bundleId];\n\n  // cache result\n  bundleResultCache[bundleId] = pathsNotFound;\n\n  // exit if queue is empty\n  if (!q) return;\n\n  // empty callback queue\n  while (q.length) {\n    q[0](bundleId, pathsNotFound);\n    q.splice(0, 1);\n  }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n  // accept function as argument\n  if (args.call) args = {success: args};\n\n  // success and error callbacks\n  if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n  else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n  var doc = document,\n      async = args.async,\n      maxTries = (args.numRetries || 0) + 1,\n      beforeCallbackFn = args.before || devnull,\n      pathStripped = path.replace(/^(css|img)!/, ''),\n      isCss,\n      e;\n\n  numTries = numTries || 0;\n\n  if (/(^css!|\\.css$)/.test(path)) {\n    isCss = true;\n\n    // css\n    e = doc.createElement('link');\n    e.rel = 'stylesheet';\n    e.href = pathStripped; //.replace(/^css!/, '');  // remove \"css!\" prefix\n  } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n    // image\n    e = doc.createElement('img');\n    e.src = pathStripped;    \n  } else {\n    // javascript\n    e = doc.createElement('script');\n    e.src = path;\n    e.async = async === undefined ? true : async;\n  }\n\n  e.onload = e.onerror = e.onbeforeload = function (ev) {\n    var result = ev.type[0];\n\n    // Note: The following code isolates IE using `hideFocus` and treats empty\n    // stylesheets as failures to get around lack of onerror support\n    if (isCss && 'hideFocus' in e) {\n      try {\n        if (!e.sheet.cssText.length) result = 'e';\n      } catch (x) {\n        // sheets objects created from load errors don't allow access to\n        // `cssText`\n        result = 'e';\n      }\n    }\n\n    // handle retries in case of load failure\n    if (result == 'e') {\n      // increment counter\n      numTries += 1;\n\n      // exit function and try again\n      if (numTries < maxTries) {\n        return loadFile(path, callbackFn, args, numTries);\n      }\n    }\n\n    // execute callback\n    callbackFn(path, result, ev.defaultPrevented);\n  };\n\n  // add to document (unless callback returns `false`)\n  if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n  // listify paths\n  paths = paths.push ? paths : [paths];\n\n  var numWaiting = paths.length,\n      x = numWaiting,\n      pathsNotFound = [],\n      fn,\n      i;\n\n  // define callback function\n  fn = function(path, result, defaultPrevented) {\n    // handle error\n    if (result == 'e') pathsNotFound.push(path);\n\n    // handle beforeload event. If defaultPrevented then that means the load\n    // will be blocked (ex. Ghostery/ABP on Safari)\n    if (result == 'b') {\n      if (defaultPrevented) pathsNotFound.push(path);\n      else return;\n    }\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(pathsNotFound);\n  };\n\n  // load scripts\n  for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n  var bundleId,\n      args;\n\n  // bundleId (if string)\n  if (arg1 && arg1.trim) bundleId = arg1;\n\n  // args (default is {})\n  args = (bundleId ? arg2 : arg1) || {};\n\n  // throw error if bundle is already defined\n  if (bundleId) {\n    if (bundleId in bundleIdCache) {\n      throw \"LoadJS\";\n    } else {\n      bundleIdCache[bundleId] = true;\n    }\n  }\n\n  // load scripts\n  loadFiles(paths, function (pathsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, pathsNotFound);\n\n    // publish bundle load event\n    publish(bundleId, pathsNotFound);\n  }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n  // subscribe to bundle load event\n  subscribe(deps, function (depsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, depsNotFound);\n  });\n\n  return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n  publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n  bundleIdCache = {};\n  bundleResultCache = {};\n  bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n  return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n    return new Promise((resolve, reject) => {\n        loadjs(url, {\n            success: resolve,\n            error: reject,\n        });\n    });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    if (is.number(Number(url))) {\n        return url;\n    }\n\n    const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n    const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n    const ratio = getRatio(width, height);\n    return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst vimeo = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set intial ratio\n        vimeo.setAspectRatio.call(this);\n\n        // Load the API if not already\n        if (!is.object(window.Vimeo)) {\n            loadScript(this.config.urls.vimeo.sdk)\n                .then(() => {\n                    vimeo.ready.call(this);\n                })\n                .catch(error => {\n                    this.debug.warn('Vimeo API failed to load', error);\n                });\n        } else {\n            vimeo.ready.call(this);\n        }\n    },\n\n    // Set aspect ratio\n    // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n    setAspectRatio(input) {\n        const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\n        const padding = 100 / x * y;\n        this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n        if (this.supported.ui) {\n            const height = 240;\n            const offset = (height - padding) / (height / 50);\n\n            this.media.style.transform = `translateY(-${offset}%)`;\n        }\n    },\n\n    // API Ready\n    ready() {\n        const player = this;\n\n        // Get Vimeo params for the iframe\n        const options = {\n            loop: player.config.loop.active,\n            autoplay: player.autoplay,\n            // muted: player.muted,\n            byline: false,\n            portrait: false,\n            title: false,\n            speed: true,\n            transparent: 0,\n            gesture: 'media',\n            playsinline: !this.config.fullscreen.iosNative,\n        };\n        const params = buildUrlParams(options);\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(player.config.attributes.embed.id);\n        }\n\n        const id = parseId(source);\n\n        // Build an iframe\n        const iframe = createElement('iframe');\n        const src = format(player.config.urls.vimeo.iframe, id, params);\n        iframe.setAttribute('src', src);\n        iframe.setAttribute('allowfullscreen', '');\n        iframe.setAttribute('allowtransparency', '');\n        iframe.setAttribute('allow', 'autoplay');\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Inject the package\n        const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n        wrapper.appendChild(iframe);\n        player.media = replaceElement(wrapper, player.media);\n\n        // Get poster image\n        fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n            if (is.empty(response)) {\n                return;\n            }\n\n            // Get the URL for thumbnail\n            const url = new URL(response[0].thumbnail_large);\n\n            // Get original image\n            url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n            // Set and show poster\n            ui.setPoster.call(player, url.href).catch(() => {});\n        });\n\n        // Setup instance\n        // https://github.com/vimeo/player.js\n        player.embed = new window.Vimeo.Player(iframe, {\n            autopause: player.config.autopause,\n            muted: player.muted,\n        });\n\n        player.media.paused = true;\n        player.media.currentTime = 0;\n\n        // Disable native text track rendering\n        if (player.supported.ui) {\n            player.embed.disableTextTrack();\n        }\n\n        // Create a faux HTML5 API using the Vimeo API\n        player.media.play = () => {\n            assurePlaybackState.call(player, true);\n            return player.embed.play();\n        };\n\n        player.media.pause = () => {\n            assurePlaybackState.call(player, false);\n            return player.embed.pause();\n        };\n\n        player.media.stop = () => {\n            player.pause();\n            player.currentTime = 0;\n        };\n\n        // Seeking\n        let { currentTime } = player.media;\n        Object.defineProperty(player.media, 'currentTime', {\n            get() {\n                return currentTime;\n            },\n            set(time) {\n                // Vimeo will automatically play on seek if the video hasn't been played before\n\n                // Get current paused state and volume etc\n                const { embed, media, paused, volume } = player;\n                const restorePause = paused && !embed.hasPlayed;\n\n                // Set seeking state and trigger event\n                media.seeking = true;\n                triggerEvent.call(player, media, 'seeking');\n\n                // If paused, mute until seek is complete\n                Promise.resolve(restorePause && embed.setVolume(0))\n                    // Seek\n                    .then(() => embed.setCurrentTime(time))\n                    // Restore paused\n                    .then(() => restorePause && embed.pause())\n                    // Restore volume\n                    .then(() => restorePause && embed.setVolume(volume))\n                    .catch(() => {\n                        // Do nothing\n                    });\n            },\n        });\n\n        // Playback speed\n        let speed = player.config.speed.selected;\n        Object.defineProperty(player.media, 'playbackRate', {\n            get() {\n                return speed;\n            },\n            set(input) {\n                player.embed\n                    .setPlaybackRate(input)\n                    .then(() => {\n                        speed = input;\n                        triggerEvent.call(player, player.media, 'ratechange');\n                    })\n                    .catch(error => {\n                        // Hide menu item (and menu if empty)\n                        if (error.name === 'Error') {\n                            controls.setSpeedMenu.call(player, []);\n                        }\n                    });\n            },\n        });\n\n        // Volume\n        let { volume } = player.config;\n        Object.defineProperty(player.media, 'volume', {\n            get() {\n                return volume;\n            },\n            set(input) {\n                player.embed.setVolume(input).then(() => {\n                    volume = input;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Muted\n        let { muted } = player.config;\n        Object.defineProperty(player.media, 'muted', {\n            get() {\n                return muted;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : false;\n\n                player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n                    muted = toggle;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Loop\n        let { loop } = player.config;\n        Object.defineProperty(player.media, 'loop', {\n            get() {\n                return loop;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n                player.embed.setLoop(toggle).then(() => {\n                    loop = toggle;\n                });\n            },\n        });\n\n        // Source\n        let currentSrc;\n        player.embed\n            .getVideoUrl()\n            .then(value => {\n                currentSrc = value;\n            })\n            .catch(error => {\n                this.debug.warn(error);\n            });\n\n        Object.defineProperty(player.media, 'currentSrc', {\n            get() {\n                return currentSrc;\n            },\n        });\n\n        // Ended\n        Object.defineProperty(player.media, 'ended', {\n            get() {\n                return player.currentTime === player.duration;\n            },\n        });\n\n        // Set aspect ratio based on video size\n        Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n            const ratio = 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            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        // Get duration\n        player.embed.getDuration().then(value => {\n            player.media.duration = value;\n            triggerEvent.call(player, player.media, 'durationchange');\n        });\n\n        // Get captions\n        player.embed.getTextTracks().then(tracks => {\n            player.media.textTracks = tracks;\n            captions.setup.call(player);\n        });\n\n        player.embed.on('cuechange', ({ cues = [] }) => {\n            const strippedCues = cues.map(cue => stripHTML(cue.text));\n            captions.updateCues.call(player, strippedCues);\n        });\n\n        player.embed.on('loaded', () => {\n            // Assure state and events are updated on autoplay\n            player.embed.getPaused().then(paused => {\n                assurePlaybackState.call(player, !paused);\n                if (!paused) {\n                    triggerEvent.call(player, player.media, 'playing');\n                }\n            });\n\n            if (is.element(player.embed.element) && player.supported.ui) {\n                const frame = player.embed.element;\n\n                // Fix keyboard focus issues\n                // https://github.com/sampotts/plyr/issues/317\n                frame.setAttribute('tabindex', -1);\n            }\n        });\n\n        player.embed.on('play', () => {\n            assurePlaybackState.call(player, true);\n            triggerEvent.call(player, player.media, 'playing');\n        });\n\n        player.embed.on('pause', () => {\n            assurePlaybackState.call(player, false);\n        });\n\n        player.embed.on('timeupdate', data => {\n            player.media.seeking = false;\n            currentTime = data.seconds;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        player.embed.on('progress', data => {\n            player.media.buffered = data.percent;\n            triggerEvent.call(player, player.media, 'progress');\n\n            // Check all loaded\n            if (parseInt(data.percent, 10) === 1) {\n                triggerEvent.call(player, player.media, 'canplaythrough');\n            }\n\n            // Get duration as if we do it before load, it gives an incorrect value\n            // https://github.com/sampotts/plyr/issues/891\n            player.embed.getDuration().then(value => {\n                if (value !== player.media.duration) {\n                    player.media.duration = value;\n                    triggerEvent.call(player, player.media, 'durationchange');\n                }\n            });\n        });\n\n        player.embed.on('seeked', () => {\n            player.media.seeking = false;\n            triggerEvent.call(player, player.media, 'seeked');\n        });\n\n        player.embed.on('ended', () => {\n            player.media.paused = true;\n            triggerEvent.call(player, player.media, 'ended');\n        });\n\n        player.embed.on('error', detail => {\n            player.media.error = detail;\n            triggerEvent.call(player, player.media, 'error');\n        });\n\n        // Rebuild UI\n        setTimeout(() => ui.build.call(player), 0);\n    },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst youtube = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set aspect ratio\n        youtube.setAspectRatio.call(this);\n\n        // Setup API\n        if (is.object(window.YT) && is.function(window.YT.Player)) {\n            youtube.ready.call(this);\n        } else {\n            // Load the API\n            loadScript(this.config.urls.youtube.sdk).catch(error => {\n                this.debug.warn('YouTube API failed to load', error);\n            });\n\n            // Setup callback for the API\n            // YouTube has it's own system of course...\n            window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n            // Add to queue\n            window.onYouTubeReadyCallbacks.push(() => {\n                youtube.ready.call(this);\n            });\n\n            // Set callback to process queue\n            window.onYouTubeIframeAPIReady = () => {\n                window.onYouTubeReadyCallbacks.forEach(callback => {\n                    callback();\n                });\n            };\n        }\n    },\n\n    // Get the media title\n    getTitle(videoId) {\n        // Try via undocumented API method first\n        // This method disappears now and then though...\n        // https://github.com/sampotts/plyr/issues/709\n        if (is.function(this.embed.getVideoData)) {\n            const { title } = this.embed.getVideoData();\n\n            if (is.empty(title)) {\n                this.config.title = title;\n                ui.setTitle.call(this);\n                return;\n            }\n        }\n\n        // Or via Google API\n        const key = this.config.keys.google;\n        if (is.string(key) && !is.empty(key)) {\n            const url = format(this.config.urls.youtube.api, videoId, key);\n\n            fetch(url)\n                .then(result => {\n                    if (is.object(result)) {\n                        this.config.title = result.items[0].snippet.title;\n                        ui.setTitle.call(this);\n                    }\n                })\n                .catch(() => {});\n        }\n    },\n\n    // Set aspect ratio\n    setAspectRatio() {\n        const ratio = this.config.ratio.split(':');\n        this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n    },\n\n    // API ready\n    ready() {\n        const player = this;\n\n        // Ignore already setup (race condition)\n        const currentId = player.media.getAttribute('id');\n        if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n            return;\n        }\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        // Replace the <iframe> with a <div> due to YouTube API issues\n        const videoId = parseId(source);\n        const id = generateId(player.provider);\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Replace media element\n        const container = createElement('div', { id, poster });\n        player.media = replaceElement(container, player.media);\n\n        // Id to poster wrapper\n        const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n        // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n        loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n            .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n            .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n            .then(image => ui.setPoster.call(player, image.src))\n            .then(posterSrc => {\n                // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n                if (!posterSrc.includes('maxres')) {\n                    player.elements.poster.style.backgroundSize = 'cover';\n                }\n            })\n            .catch(() => {});\n\n        // Setup instance\n        // https://developers.google.com/youtube/iframe_api_reference\n        player.embed = new window.YT.Player(id, {\n            videoId,\n            playerVars: {\n                autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n                hl: player.config.hl, // iframe interface language\n                controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n                rel: 0, // No related vids\n                showinfo: 0, // Hide info\n                iv_load_policy: 3, // Hide annotations\n                modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n                disablekb: 1, // Disable keyboard as we handle it\n                playsinline: 1, // Allow iOS inline playback\n\n                // Tracking for stats\n                // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n                widget_referrer: window ? window.location.href : null,\n\n                // Captions are flaky on YouTube\n                cc_load_policy: player.captions.active ? 1 : 0,\n                cc_lang_pref: player.config.captions.language,\n            },\n            events: {\n                onError(event) {\n                    // YouTube may fire onError twice, so only handle it once\n                    if (!player.media.error) {\n                        const code = event.data;\n                        // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n                        const message =\n                            {\n                                2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                                5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                                100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                                101: 'The owner of the requested video does not allow it to be played in embedded players.',\n                                150: 'The owner of the requested video does not allow it to be played in embedded players.',\n                            }[code] || 'An unknown error occured';\n\n                        player.media.error = { code, message };\n\n                        triggerEvent.call(player, player.media, 'error');\n                    }\n                },\n                onPlaybackRateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current speed\n                    player.media.playbackRate = instance.getPlaybackRate();\n\n                    triggerEvent.call(player, player.media, 'ratechange');\n                },\n                onReady(event) {\n                    // Bail if onReady has already been called. See issue #1108\n                    if (is.function(player.media.play)) {\n                        return;\n                    }\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get the title\n                    youtube.getTitle.call(player, videoId);\n\n                    // Create a faux HTML5 API using the YouTube API\n                    player.media.play = () => {\n                        assurePlaybackState.call(player, true);\n                        instance.playVideo();\n                    };\n\n                    player.media.pause = () => {\n                        assurePlaybackState.call(player, false);\n                        instance.pauseVideo();\n                    };\n\n                    player.media.stop = () => {\n                        instance.stopVideo();\n                    };\n\n                    player.media.duration = instance.getDuration();\n                    player.media.paused = true;\n\n                    // Seeking\n                    player.media.currentTime = 0;\n                    Object.defineProperty(player.media, 'currentTime', {\n                        get() {\n                            return Number(instance.getCurrentTime());\n                        },\n                        set(time) {\n                            // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n                            if (player.paused && !player.embed.hasPlayed) {\n                                player.embed.mute();\n                            }\n\n                            // Set seeking state and trigger event\n                            player.media.seeking = true;\n                            triggerEvent.call(player, player.media, 'seeking');\n\n                            // Seek after events sent\n                            instance.seekTo(time);\n                        },\n                    });\n\n                    // Playback speed\n                    Object.defineProperty(player.media, 'playbackRate', {\n                        get() {\n                            return instance.getPlaybackRate();\n                        },\n                        set(input) {\n                            instance.setPlaybackRate(input);\n                        },\n                    });\n\n                    // Volume\n                    let { volume } = player.config;\n                    Object.defineProperty(player.media, 'volume', {\n                        get() {\n                            return volume;\n                        },\n                        set(input) {\n                            volume = input;\n                            instance.setVolume(volume * 100);\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Muted\n                    let { muted } = player.config;\n                    Object.defineProperty(player.media, 'muted', {\n                        get() {\n                            return muted;\n                        },\n                        set(input) {\n                            const toggle = is.boolean(input) ? input : muted;\n                            muted = toggle;\n                            instance[toggle ? 'mute' : 'unMute']();\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Source\n                    Object.defineProperty(player.media, 'currentSrc', {\n                        get() {\n                            return instance.getVideoUrl();\n                        },\n                    });\n\n                    // Ended\n                    Object.defineProperty(player.media, 'ended', {\n                        get() {\n                            return player.currentTime === player.duration;\n                        },\n                    });\n\n                    // Get available speeds\n                    player.options.speed = instance.getAvailablePlaybackRates();\n\n                    // Set the tabindex to avoid focus entering iframe\n                    if (player.supported.ui) {\n                        player.media.setAttribute('tabindex', -1);\n                    }\n\n                    triggerEvent.call(player, player.media, 'timeupdate');\n                    triggerEvent.call(player, player.media, 'durationchange');\n\n                    // Reset timer\n                    clearInterval(player.timers.buffering);\n\n                    // Setup buffering\n                    player.timers.buffering = setInterval(() => {\n                        // Get loaded % from YouTube\n                        player.media.buffered = instance.getVideoLoadedFraction();\n\n                        // Trigger progress only when we actually buffer something\n                        if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                            triggerEvent.call(player, player.media, 'progress');\n                        }\n\n                        // Set last buffer point\n                        player.media.lastBuffered = player.media.buffered;\n\n                        // Bail if we're at 100%\n                        if (player.media.buffered === 1) {\n                            clearInterval(player.timers.buffering);\n\n                            // Trigger event\n                            triggerEvent.call(player, player.media, 'canplaythrough');\n                        }\n                    }, 200);\n\n                    // Rebuild UI\n                    setTimeout(() => ui.build.call(player), 50);\n                },\n                onStateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Reset timer\n                    clearInterval(player.timers.playing);\n\n                    const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n                    if (seeked) {\n                        // Unset seeking and fire seeked event\n                        player.media.seeking = false;\n                        triggerEvent.call(player, player.media, 'seeked');\n                    }\n\n                    // Handle events\n                    // -1   Unstarted\n                    // 0    Ended\n                    // 1    Playing\n                    // 2    Paused\n                    // 3    Buffering\n                    // 5    Video cued\n                    switch (event.data) {\n                        case -1:\n                            // Update scrubber\n                            triggerEvent.call(player, player.media, 'timeupdate');\n\n                            // Get loaded % from YouTube\n                            player.media.buffered = instance.getVideoLoadedFraction();\n                            triggerEvent.call(player, player.media, 'progress');\n\n                            break;\n\n                        case 0:\n                            assurePlaybackState.call(player, false);\n\n                            // YouTube doesn't support loop for a single video, so mimick it.\n                            if (player.media.loop) {\n                                // YouTube needs a call to `stopVideo` before playing again\n                                instance.stopVideo();\n                                instance.playVideo();\n                            } else {\n                                triggerEvent.call(player, player.media, 'ended');\n                            }\n\n                            break;\n\n                        case 1:\n                            // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (player.media.paused && !player.embed.hasPlayed) {\n                                player.media.pause();\n                            } else {\n                                assurePlaybackState.call(player, true);\n\n                                triggerEvent.call(player, player.media, 'playing');\n\n                                // Poll to get playback progress\n                                player.timers.playing = setInterval(() => {\n                                    triggerEvent.call(player, player.media, 'timeupdate');\n                                }, 50);\n\n                                // Check duration again due to YouTube bug\n                                // https://github.com/sampotts/plyr/issues/374\n                                // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n                                if (player.media.duration !== instance.getDuration()) {\n                                    player.media.duration = instance.getDuration();\n                                    triggerEvent.call(player, player.media, 'durationchange');\n                                }\n                            }\n\n                            break;\n\n                        case 2:\n                            // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (!player.muted) {\n                                player.embed.unMute();\n                            }\n                            assurePlaybackState.call(player, false);\n\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    triggerEvent.call(player, player.elements.container, 'statechange', false, {\n                        code: event.data,\n                    });\n                },\n            },\n        });\n    },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n    // Setup media\n    setup() {\n        // If there's no media, bail\n        if (!this.media) {\n            this.debug.warn('No media element found!');\n            return;\n        }\n\n        // Add type class\n        toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n        // Add provider class\n        toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n        // Add video class for embeds\n        // This will require changes if audio embeds are added\n        if (this.isEmbed) {\n            toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n        }\n\n        // Inject the player wrapper\n        if (this.isVideo) {\n            // Create the wrapper div\n            this.elements.wrapper = createElement('div', {\n                class: this.config.classNames.video,\n            });\n\n            // Wrap the video in a container\n            wrap(this.media, this.elements.wrapper);\n\n            // Faux poster container\n            this.elements.poster = createElement('div', {\n                class: this.config.classNames.poster,\n            });\n\n            this.elements.wrapper.appendChild(this.elements.poster);\n        }\n\n        if (this.isHTML5) {\n            html5.extend.call(this);\n        } else if (this.isYouTube) {\n            youtube.setup.call(this);\n        } else if (this.isVimeo) {\n            vimeo.setup.call(this);\n        }\n    },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n    /**\n     * Ads constructor.\n     * @param {object} player\n     * @return {Ads}\n     */\n    constructor(player) {\n        this.player = player;\n        this.publisherId = player.config.ads.publisherId;\n        this.playing = false;\n        this.initialized = false;\n        this.elements = {\n            container: null,\n            displayContainer: null,\n        };\n        this.manager = null;\n        this.loader = null;\n        this.cuePoints = null;\n        this.events = {};\n        this.safetyTimer = null;\n        this.countdownTimer = null;\n\n        // Setup a promise to resolve when the IMA manager is ready\n        this.managerPromise = new Promise((resolve, reject) => {\n            // The ad is loaded and ready\n            this.on('loaded', resolve);\n\n            // Ads failed\n            this.on('error', reject);\n        });\n\n        this.load();\n    }\n\n    get enabled() {\n        return (\n            this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n        );\n    }\n\n    /**\n     * Load the IMA SDK\n     */\n    load() {\n        if (this.enabled) {\n            // Check if the Google IMA3 SDK is loaded or load it ourselves\n            if (!is.object(window.google) || !is.object(window.google.ima)) {\n                loadScript(this.player.config.urls.googleIMA.sdk)\n                    .then(() => {\n                        this.ready();\n                    })\n                    .catch(() => {\n                        // Script failed to load or is blocked\n                        this.trigger('error', new Error('Google IMA SDK failed to load'));\n                    });\n            } else {\n                this.ready();\n            }\n        }\n    }\n\n    /**\n     * Get the ads instance ready\n     */\n    ready() {\n        // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n        this.startSafetyTimer(12000, 'ready()');\n\n        // Clear the safety timer\n        this.managerPromise.then(() => {\n            this.clearSafetyTimer('onAdsManagerLoaded()');\n        });\n\n        // Set listeners on the Plyr instance\n        this.listeners();\n\n        // Setup the IMA SDK\n        this.setupIMA();\n    }\n\n    // Build the default tag URL\n    get tagUrl() {\n        const params = {\n            AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n            AV_CHANNELID: '5a0458dc28a06145e4519d21',\n            AV_URL: window.location.hostname,\n            cb: Date.now(),\n            AV_WIDTH: 640,\n            AV_HEIGHT: 480,\n            AV_CDIM2: this.publisherId,\n        };\n\n        const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n        return `${base}?${buildUrlParams(params)}`;\n    }\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = createElement('div', {\n            class: this.player.config.classNames.ads,\n        });\n        this.player.elements.container.appendChild(this.elements.container);\n\n        // So we can run VPAID2\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n        // Set language\n        google.ima.settings.setLocale(this.player.config.ads.language);\n\n        // We assume the adContainer is the video container of the plyr element\n        // that will house the ads\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n        // Request video ads to be pre-loaded\n        this.requestAds();\n    }\n\n    /**\n     * Request advertisements\n     */\n    requestAds() {\n        const { container } = this.player.elements;\n\n        try {\n            // Create ads loader\n            this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n            // Listen and respond to ads loaded and error events\n            this.loader.addEventListener(\n                google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n                event => this.onAdsManagerLoaded(event),\n                false,\n            );\n            this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n            // Request video ads\n            const request = new google.ima.AdsRequest();\n            request.adTagUrl = this.tagUrl;\n\n            // Specify the linear and nonlinear slot sizes. This helps the SDK\n            // to select the correct creative if multiple are returned\n            request.linearAdSlotWidth = container.offsetWidth;\n            request.linearAdSlotHeight = container.offsetHeight;\n            request.nonLinearAdSlotWidth = container.offsetWidth;\n            request.nonLinearAdSlotHeight = container.offsetHeight;\n\n            // We only overlay ads as we only support video.\n            request.forceNonLinearFullSlot = false;\n\n            // Mute based on current state\n            request.setAdWillPlayMuted(!this.player.muted);\n\n            this.loader.requestAds(request);\n        } catch (e) {\n            this.onAdError(e);\n        }\n    }\n\n    /**\n     * Update the ad countdown\n     * @param {boolean} start\n     */\n    pollCountdown(start = false) {\n        if (!start) {\n            clearInterval(this.countdownTimer);\n            this.elements.container.removeAttribute('data-badge-text');\n            return;\n        }\n\n        const update = () => {\n            const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n            const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n            this.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n    }\n\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n    onAdsManagerLoaded(event) {\n        // Load could occur after a source change (race condition)\n        if (!this.enabled) {\n            return;\n        }\n\n        // Get the ads manager\n        const settings = new google.ima.AdsRenderingSettings();\n\n        // Tell the SDK to save and restore content video state on our behalf\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true;\n\n        // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n        this.manager = event.getAdsManager(this.player, settings);\n\n        // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n        this.cuePoints = this.manager.getCuePoints();\n\n        // Add advertisement cue's within the time line if available\n        if (!is.empty(this.cuePoints)) {\n            this.cuePoints.forEach(cuePoint => {\n                if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n                    const seekElement = this.player.elements.progress;\n\n                    if (is.element(seekElement)) {\n                        const cuePercentage = 100 / this.player.duration * cuePoint;\n                        const cue = createElement('span', {\n                            class: this.player.config.classNames.cues,\n                        });\n\n                        cue.style.left = `${cuePercentage.toString()}%`;\n                        seekElement.appendChild(cue);\n                    }\n                }\n            });\n        }\n\n        // Set volume to match player\n        this.manager.setVolume(this.player.volume);\n\n        // Add listeners to the required events\n        // Advertisement error events\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n        // Advertisement regular events\n        Object.keys(google.ima.AdEvent.Type).forEach(type => {\n            this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n        });\n\n        // Resolve our adsManager\n        this.trigger('loaded');\n    }\n\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n    onAdEvent(event) {\n        const { container } = this.player.elements;\n\n        // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n        const ad = event.getAd();\n\n        // Proxy event\n        const dispatchEvent = type => {\n            const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n            triggerEvent.call(this.player, this.player.media, event);\n        };\n\n        switch (event.type) {\n            case google.ima.AdEvent.Type.LOADED:\n                // This is the first event sent for an ad - it is possible to determine whether the\n                // ad is a video ad or an overlay\n                this.trigger('loaded');\n\n                // Bubble event\n                dispatchEvent(event.type);\n\n                // Start countdown\n                this.pollCountdown(true);\n\n                if (!ad.isLinear()) {\n                    // Position AdDisplayContainer correctly for overlay\n                    ad.width = container.offsetWidth;\n                    ad.height = container.offsetHeight;\n                }\n\n                // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n                // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n                break;\n\n            case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n                // All ads for the current videos are done. We can now request new advertisements\n                // in case the video is re-played\n\n                // Fire event\n                dispatchEvent(event.type);\n\n                // TODO: Example for what happens when a next video in a playlist would be loaded.\n                // So here we load a new video when all ads are done.\n                // Then we load new ads within a new adsManager. When the video\n                // Is started - after - the ads are loaded, then we get ads.\n                // You can also easily test cancelling and reloading by running\n                // player.ads.cancel() and player.ads.play from the console I guess.\n                // this.player.source = {\n                //     type: 'video',\n                //     title: 'View From A Blue Moon',\n                //     sources: [{\n                //         src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n                // 'video/mp4', }], poster:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n                // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n                // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n                // };\n\n                // TODO: So there is still this thing where a video should only be allowed to start\n                // playing when the IMA SDK is ready or has failed\n\n                this.loadAds();\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n                // This event indicates the ad has started - the video player can adjust the UI,\n                // for example display a pause button and remaining time. Fired when content should\n                // be paused. This usually happens right before an ad is about to cover the content\n\n                dispatchEvent(event.type);\n\n                this.pauseContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n                // This event indicates the ad has finished - the video player can perform\n                // appropriate UI actions, such as removing the timer for remaining time detection.\n                // Fired when content should be resumed. This usually happens when an ad finishes\n                // or collapses\n\n                dispatchEvent(event.type);\n\n                this.pollCountdown();\n\n                this.resumeContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.STARTED:\n            case google.ima.AdEvent.Type.MIDPOINT:\n            case google.ima.AdEvent.Type.COMPLETE:\n            case google.ima.AdEvent.Type.IMPRESSION:\n            case google.ima.AdEvent.Type.CLICK:\n                dispatchEvent(event.type);\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n    onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n    }\n\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n    listeners() {\n        const { container } = this.player.elements;\n        let time;\n\n        // Add listeners to the required events\n        this.player.on('ended', () => {\n            this.loader.contentComplete();\n        });\n\n        this.player.on('seeking', () => {\n            time = this.player.currentTime;\n            return time;\n        });\n\n        this.player.on('seeked', () => {\n            const seekedTime = this.player.currentTime;\n\n            if (is.empty(this.cuePoints)) {\n                return;\n            }\n\n            this.cuePoints.forEach((cuePoint, index) => {\n                if (time < cuePoint && cuePoint < seekedTime) {\n                    this.manager.discardAdBreak();\n                    this.cuePoints.splice(index, 1);\n                }\n            });\n        });\n\n        // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n        window.addEventListener('resize', () => {\n            if (this.manager) {\n                this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n            }\n        });\n    }\n\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n    play() {\n        const { container } = this.player.elements;\n\n        if (!this.managerPromise) {\n            this.resumeContent();\n        }\n\n        // Play the requested advertisement whenever the adsManager is ready\n        this.managerPromise\n            .then(() => {\n                // Initialize the container. Must be done via a user action on mobile devices\n                this.elements.displayContainer.initialize();\n\n                try {\n                    if (!this.initialized) {\n                        // Initialize the ads manager. Ad rules playlist will start at this time\n                        this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n                        // Call play to start showing the ad. Single video and overlay ads will\n                        // start at this time; the call will be ignored for ad rules\n                        this.manager.start();\n                    }\n\n                    this.initialized = true;\n                } catch (adError) {\n                    // An error may be thrown if there was a problem with the\n                    // VAST response\n                    this.onAdError(adError);\n                }\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Resume our video\n     */\n    resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = '';\n\n        // Ad is stopped\n        this.playing = false;\n\n        // Play our video\n        if (this.player.currentTime < this.player.duration) {\n            this.player.play();\n        }\n    }\n\n    /**\n     * Pause our video\n     */\n    pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3;\n\n        // Ad is playing.\n        this.playing = true;\n\n        // Pause our video.\n        this.player.pause();\n    }\n\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n    cancel() {\n        // Pause our video\n        if (this.initialized) {\n            this.resumeContent();\n        }\n\n        // Tell our instance that we're done for now\n        this.trigger('error');\n\n        // Re-create our adsManager\n        this.loadAds();\n    }\n\n    /**\n     * Re-create our adsManager\n     */\n    loadAds() {\n        // Tell our adsManager to go bye bye\n        this.managerPromise\n            .then(() => {\n                // Destroy our adsManager\n                if (this.manager) {\n                    this.manager.destroy();\n                }\n\n                // Re-set our adsManager promises\n                this.managerPromise = new Promise(resolve => {\n                    this.on('loaded', resolve);\n                    this.player.debug.log(this.manager);\n                });\n\n                // Now request some new advertisements\n                this.requestAds();\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {string} event - Event type\n     */\n    trigger(event, ...args) {\n        const handlers = this.events[event];\n\n        if (is.array(handlers)) {\n            handlers.forEach(handler => {\n                if (is.function(handler)) {\n                    handler.apply(this, args);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n    on(event, callback) {\n        if (!is.array(this.events[event])) {\n            this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n\n        return this;\n    }\n\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {number} time\n     * @param {string} from\n     */\n    startSafetyTimer(time, from) {\n        this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n        this.safetyTimer = setTimeout(() => {\n            this.cancel();\n            this.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n    }\n\n    /**\n     * Clear our safety timer(s)\n     * @param {string} from\n     */\n    clearSafetyTimer(from) {\n        if (!is.nullOrUndefined(this.safetyTimer)) {\n            this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n            clearTimeout(this.safetyTimer);\n            this.safetyTimer = null;\n        }\n    }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements(type, attributes) {\n        if (is.string(attributes)) {\n            insertElement(type, this.media, {\n                src: attributes,\n            });\n        } else if (is.array(attributes)) {\n            attributes.forEach(attribute => {\n                insertElement(type, this.media, attribute);\n            });\n        }\n    },\n\n    // Update source\n    // Sources are not checked for support so be careful\n    change(input) {\n        if (!getDeep(input, 'sources.length')) {\n            this.debug.warn('Invalid source format');\n            return;\n        }\n\n        // Cancel current network requests\n        html5.cancelRequests.call(this);\n\n        // Destroy instance and re-setup\n        this.destroy.call(\n            this,\n            () => {\n                // Reset quality options\n                this.options.quality = [];\n\n                // Remove elements\n                removeElement(this.media);\n                this.media = null;\n\n                // Reset class name\n                if (is.element(this.elements.container)) {\n                    this.elements.container.removeAttribute('class');\n                }\n\n                // Set the type and provider\n                const { sources, type } = input;\n                const [{ provider = providers.html5, src }] = sources;\n                const tagName = provider === 'html5' ? type : 'div';\n                const attributes = provider === 'html5' ? {} : { src };\n\n                Object.assign(this, {\n                    provider,\n                    type,\n                    // Check for support\n                    supported: support.check(type, provider, this.config.playsinline),\n                    // Create new element\n                    media: createElement(tagName, attributes),\n                });\n\n                // Inject the new element\n                this.elements.container.appendChild(this.media);\n\n                // Autoplay the new source?\n                if (is.boolean(input.autoplay)) {\n                    this.config.autoplay = input.autoplay;\n                }\n\n                // Set attributes for audio and video\n                if (this.isHTML5) {\n                    if (this.config.crossorigin) {\n                        this.media.setAttribute('crossorigin', '');\n                    }\n                    if (this.config.autoplay) {\n                        this.media.setAttribute('autoplay', '');\n                    }\n                    if (!is.empty(input.poster)) {\n                        this.poster = input.poster;\n                    }\n                    if (this.config.loop.active) {\n                        this.media.setAttribute('loop', '');\n                    }\n                    if (this.config.muted) {\n                        this.media.setAttribute('muted', '');\n                    }\n                    if (this.config.playsinline) {\n                        this.media.setAttribute('playsinline', '');\n                    }\n                }\n\n                // Restore class hook\n                ui.addStyleHook.call(this);\n\n                // Set new sources for html5\n                if (this.isHTML5) {\n                    source.insertElements.call(this, 'source', sources);\n                }\n\n                // Set video title\n                this.config.title = input.title;\n\n                // Set up from scratch\n                media.setup.call(this);\n\n                // HTML5 stuff\n                if (this.isHTML5) {\n                    // Setup captions\n                    if ('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.4.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n    constructor(target, options) {\n        this.timers = {};\n\n        // State\n        this.ready = false;\n        this.loading = false;\n        this.failed = false;\n\n        // Touch device\n        this.touch = support.touch;\n\n        // Set the media element\n        this.media = target;\n\n        // String selector passed\n        if (is.string(this.media)) {\n            this.media = document.querySelectorAll(this.media);\n        }\n\n        // jQuery, NodeList or Array passed, use first element\n        if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n            // eslint-disable-next-line\n            this.media = this.media[0];\n        }\n\n        // Set config\n        this.config = extend(\n            {},\n            defaults,\n            Plyr.defaults,\n            options || {},\n            (() => {\n                try {\n                    return JSON.parse(this.media.getAttribute('data-plyr-config'));\n                } catch (e) {\n                    return {};\n                }\n            })(),\n        );\n\n        // Elements cache\n        this.elements = {\n            container: null,\n            captions: null,\n            buttons: {},\n            display: {},\n            progress: {},\n            inputs: {},\n            settings: {\n                popup: null,\n                menu: null,\n                panels: {},\n                buttons: {},\n            },\n        };\n\n        // Captions\n        this.captions = {\n            active: null,\n            currentTrack: -1,\n            meta: new WeakMap(),\n        };\n\n        // Fullscreen\n        this.fullscreen = {\n            active: false,\n        };\n\n        // Options\n        this.options = {\n            speed: [],\n            quality: [],\n        };\n\n        // Debugging\n        // TODO: move to globals\n        this.debug = new Console(this.config.debug);\n\n        // Log config options and support\n        this.debug.log('Config', this.config);\n        this.debug.log('Support', support);\n\n        // We need an element to setup\n        if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n            this.debug.error('Setup failed: no suitable element passed');\n            return;\n        }\n\n        // Bail if the element is initialized\n        if (this.media.plyr) {\n            this.debug.warn('Target already setup');\n            return;\n        }\n\n        // Bail if not enabled\n        if (!this.config.enabled) {\n            this.debug.error('Setup failed: disabled by config');\n            return;\n        }\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!support.check().api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Cache original element state for .destroy()\n        const clone = this.media.cloneNode(true);\n        clone.autoplay = false;\n        this.elements.original = clone;\n\n        // Set media type based on tag or data attribute\n        // Supported: video, audio, vimeo, youtube\n        const type = this.media.tagName.toLowerCase();\n\n        // Embed properties\n        let iframe = null;\n        let url = null;\n\n        // Different setup based on type\n        switch (type) {\n            case 'div':\n                // Find the frame\n                iframe = this.media.querySelector('iframe');\n\n                // <iframe> type\n                if (is.element(iframe)) {\n                    // Detect provider\n                    url = parseUrl(iframe.getAttribute('src'));\n                    this.provider = getProviderByUrl(url.toString());\n\n                    // Rework elements\n                    this.elements.container = this.media;\n                    this.media = iframe;\n\n                    // Reset classname\n                    this.elements.container.className = '';\n\n                    // Get attributes from URL and set config\n                    if (url.search.length) {\n                        const truthy = ['1', 'true'];\n\n                        if (truthy.includes(url.searchParams.get('autoplay'))) {\n                            this.config.autoplay = true;\n                        }\n                        if (truthy.includes(url.searchParams.get('loop'))) {\n                            this.config.loop.active = true;\n                        }\n\n                        // TODO: replace fullscreen.iosNative with this playsinline config option\n                        // YouTube requires the playsinline in the URL\n                        if (this.isYouTube) {\n                            this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n                            this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n                        } else {\n                            this.config.playsinline = true;\n                        }\n                    }\n                } else {\n                    // <div> with attributes\n                    this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n                    // Remove attribute\n                    this.media.removeAttribute(this.config.attributes.embed.provider);\n                }\n\n                // Unsupported or missing provider\n                if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n                    this.debug.error('Setup failed: Invalid provider');\n                    return;\n                }\n\n                // Audio will come later for external providers\n                this.type = types.video;\n\n                break;\n\n            case 'video':\n            case 'audio':\n                this.type = type;\n                this.provider = providers.html5;\n\n                // Get config from attributes\n                if (this.media.hasAttribute('crossorigin')) {\n                    this.config.crossorigin = true;\n                }\n                if (this.media.hasAttribute('autoplay')) {\n                    this.config.autoplay = true;\n                }\n                if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n                    this.config.playsinline = true;\n                }\n                if (this.media.hasAttribute('muted')) {\n                    this.config.muted = true;\n                }\n                if (this.media.hasAttribute('loop')) {\n                    this.config.loop.active = true;\n                }\n\n                break;\n\n            default:\n                this.debug.error('Setup failed: unsupported type');\n                return;\n        }\n\n        // Check for support again but with type\n        this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n        // If no support for even API, bail\n        if (!this.supported.api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        this.eventListeners = [];\n\n        // Create listeners\n        this.listeners = new Listeners(this);\n\n        // Setup local storage for user settings\n        this.storage = new Storage(this);\n\n        // Store reference\n        this.media.plyr = this;\n\n        // Wrap media\n        if (!is.element(this.elements.container)) {\n            this.elements.container = createElement('div');\n            wrap(this.media, this.elements.container);\n        }\n\n        // Add style hook\n        ui.addStyleHook.call(this);\n\n        // Setup media\n        media.setup.call(this);\n\n        // Listen for events if debugging\n        if (this.config.debug) {\n            on.call(this, this.elements.container, this.config.events.join(' '), event => {\n                this.debug.log(`event: ${event.type}`);\n            });\n        }\n\n        // Setup interface\n        // If embed but not fully supported, build interface now to avoid flash of controls\n        if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n            ui.build.call(this);\n        }\n\n        // Container listeners\n        this.listeners.container();\n\n        // Global listeners\n        this.listeners.global();\n\n        // Setup fullscreen\n        this.fullscreen = new Fullscreen(this);\n\n        // Setup ads if provided\n        if (this.config.ads.enabled) {\n            this.ads = new Ads(this);\n        }\n\n        // Autoplay if required\n        if (this.config.autoplay) {\n            this.play();\n        }\n    }\n\n    // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n    get isHTML5() {\n        return Boolean(this.provider === providers.html5);\n    }\n\n    get isEmbed() {\n        return Boolean(this.isYouTube || this.isVimeo);\n    }\n\n    get isYouTube() {\n        return Boolean(this.provider === providers.youtube);\n    }\n\n    get isVimeo() {\n        return Boolean(this.provider === providers.vimeo);\n    }\n\n    get isVideo() {\n        return Boolean(this.type === types.video);\n    }\n\n    get isAudio() {\n        return Boolean(this.type === types.audio);\n    }\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    play() {\n        if (!is.function(this.media.play)) {\n            return null;\n        }\n\n        // Return the promise (for HTML5)\n        return this.media.play();\n    }\n\n    /**\n     * Pause the media\n     */\n    pause() {\n        if (!this.playing || !is.function(this.media.pause)) {\n            return;\n        }\n\n        this.media.pause();\n    }\n\n    /**\n     * Get playing state\n     */\n    get playing() {\n        return Boolean(this.ready && !this.paused && !this.ended);\n    }\n\n    /**\n     * Get paused state\n     */\n    get paused() {\n        return Boolean(this.media.paused);\n    }\n\n    /**\n     * Get stopped state\n     */\n    get stopped() {\n        return Boolean(this.paused && this.currentTime === 0);\n    }\n\n    /**\n     * Get ended state\n     */\n    get ended() {\n        return Boolean(this.media.ended);\n    }\n\n    /**\n     * Toggle playback based on current status\n     * @param {boolean} input\n     */\n    togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        const toggle = is.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Stop playback\n     */\n    stop() {\n        if (this.isHTML5) {\n            this.pause();\n            this.restart();\n        } else if (is.function(this.media.stop)) {\n            this.media.stop();\n        }\n    }\n\n    /**\n     * Restart playback\n     */\n    restart() {\n        this.currentTime = 0;\n    }\n\n    /**\n     * Rewind\n     * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n    rewind(seekTime) {\n        this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Fast forward\n     * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n    forward(seekTime) {\n        this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Seek to a time\n     * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n    set currentTime(input) {\n        // Bail if media duration isn't available yet\n        if (!this.duration) {\n            return;\n        }\n\n        // Validate input\n        const inputIsValid = is.number(input) && input > 0;\n\n        // Set\n        this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n        // Logging\n        this.debug.log(`Seeking to ${this.currentTime} seconds`);\n    }\n\n    /**\n     * Get current time\n     */\n    get currentTime() {\n        return Number(this.media.currentTime);\n    }\n\n    /**\n     * Get buffered\n     */\n    get buffered() {\n        const { buffered } = this.media;\n\n        // YouTube / Vimeo return a float between 0-1\n        if (is.number(buffered)) {\n            return buffered;\n        }\n\n        // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n        if (buffered && buffered.length && this.duration > 0) {\n            return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get seeking status\n     */\n    get seeking() {\n        return Boolean(this.media.seeking);\n    }\n\n    /**\n     * Get the duration of the current media\n     */\n    get duration() {\n        // Faux duration set via config\n        const fauxDuration = parseFloat(this.config.duration);\n\n        // Media duration can be NaN or Infinity before the media has loaded\n        const realDuration = (this.media || {}).duration;\n        const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n        // If config duration is funky, use regular duration\n        return fauxDuration || duration;\n    }\n\n    /**\n     * Set the player volume\n     * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n    set volume(value) {\n        let volume = value;\n        const max = 1;\n        const min = 0;\n\n        if (is.string(volume)) {\n            volume = Number(volume);\n        }\n\n        // Load volume from storage if no value specified\n        if (!is.number(volume)) {\n            volume = this.storage.get('volume');\n        }\n\n        // Use config if all else fails\n        if (!is.number(volume)) {\n            ({ volume } = this.config);\n        }\n\n        // Maximum is volumeMax\n        if (volume > max) {\n            volume = max;\n        }\n        // Minimum is volumeMin\n        if (volume < min) {\n            volume = min;\n        }\n\n        // Update config\n        this.config.volume = volume;\n\n        // Set the player volume\n        this.media.volume = volume;\n\n        // If muted, and we're increasing volume manually, reset muted state\n        if (!is.empty(value) && this.muted && volume > 0) {\n            this.muted = false;\n        }\n    }\n\n    /**\n     * Get the current player volume\n     */\n    get volume() {\n        return Number(this.media.volume);\n    }\n\n    /**\n     * Increase volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    increaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (is.number(step) ? step : 0);\n    }\n\n    /**\n     * Decrease volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    decreaseVolume(step) {\n        this.increaseVolume(-step);\n    }\n\n    /**\n     * Set muted state\n     * @param {boolean} mute\n     */\n    set muted(mute) {\n        let toggle = mute;\n\n        // Load muted state from storage\n        if (!is.boolean(toggle)) {\n            toggle = this.storage.get('muted');\n        }\n\n        // Use config if all else fails\n        if (!is.boolean(toggle)) {\n            toggle = this.config.muted;\n        }\n\n        // Update config\n        this.config.muted = toggle;\n\n        // Set mute on the player\n        this.media.muted = toggle;\n    }\n\n    /**\n     * Get current muted state\n     */\n    get muted() {\n        return Boolean(this.media.muted);\n    }\n\n    /**\n     * Check if the media has audio\n     */\n    get hasAudio() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n            return true;\n        }\n\n        if (this.isAudio) {\n            return true;\n        }\n\n        // Get audio tracks\n        return (\n            Boolean(this.media.mozHasAudio) ||\n            Boolean(this.media.webkitAudioDecodedByteCount) ||\n            Boolean(this.media.audioTracks && this.media.audioTracks.length)\n        );\n    }\n\n    /**\n     * Set playback speed\n     * @param {number} speed - the speed of playback (0.5-2.0)\n     */\n    set speed(input) {\n        let speed = null;\n\n        if (is.number(input)) {\n            speed = input;\n        }\n\n        if (!is.number(speed)) {\n            speed = this.storage.get('speed');\n        }\n\n        if (!is.number(speed)) {\n            speed = this.config.speed.selected;\n        }\n\n        // Set min/max\n        if (speed < 0.1) {\n            speed = 0.1;\n        }\n        if (speed > 2.0) {\n            speed = 2.0;\n        }\n\n        if (!this.config.speed.options.includes(speed)) {\n            this.debug.warn(`Unsupported speed (${speed})`);\n            return;\n        }\n\n        // Update config\n        this.config.speed.selected = speed;\n\n        // Set media speed\n        this.media.playbackRate = speed;\n    }\n\n    /**\n     * Get current playback speed\n     */\n    get speed() {\n        return Number(this.media.playbackRate);\n    }\n\n    /**\n     * Set playback quality\n     * Currently HTML5 & YouTube only\n     * @param {number} input - Quality level\n     */\n    set quality(input) {\n        const config = this.config.quality;\n        const options = this.options.quality;\n\n        if (!options.length) {\n            return;\n        }\n\n        let quality = [\n            !is.empty(input) && Number(input),\n            this.storage.get('quality'),\n            config.selected,\n            config.default,\n        ].find(is.number);\n\n        if (!options.includes(quality)) {\n            const value = closest(options, quality);\n            this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n            quality = value;\n        }\n\n        // Update config\n        config.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 = 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, false).catch(() => {});\n    }\n\n    /**\n     * Get the current poster image\n     */\n    get poster() {\n        if (!this.isVideo) {\n            return null;\n        }\n\n        return this.media.getAttribute('poster');\n    }\n\n    /**\n     * Set the autoplay state\n     * @param {boolean} input - Whether to autoplay or not\n     */\n    set autoplay(input) {\n        const toggle = is.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n    }\n\n    /**\n     * Get the current autoplay state\n     */\n    get autoplay() {\n        return Boolean(this.config.autoplay);\n    }\n\n    /**\n     * Toggle captions\n     * @param {boolean} input - Whether to enable captions\n     */\n    toggleCaptions(input) {\n        captions.toggle.call(this, input, false);\n    }\n\n    /**\n     * Set the caption track by index\n     * @param {number} - Caption index\n     */\n    set currentTrack(input) {\n        captions.set.call(this, input, false);\n    }\n\n    /**\n     * Get the current caption track index (-1 if disabled)\n     */\n    get currentTrack() {\n        const { toggled, currentTrack } = this.captions;\n        return toggled ? currentTrack : -1;\n    }\n\n    /**\n     * Set the wanted language for captions\n     * Since tracks can be added later it won't update the actual caption track until there is a matching track\n     * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n    set language(input) {\n        captions.setLanguage.call(this, input, false);\n    }\n\n    /**\n     * Get the current track's language\n     */\n    get language() {\n        return (captions.getCurrentTrack.call(this) || {}).language;\n    }\n\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n    set pip(input) {\n        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 = 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 = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n            // Negate the argument if not undefined since adding the class to hides the controls\n            const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n            // Apply and get updated state\n            const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n            // Close menu\n            if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n                controls.toggleMenu.call(this, false);\n            }\n\n            // Trigger event on change\n            if (hiding !== isHidden) {\n                const eventName = hiding ? 'controlshidden' : 'controlsshown';\n                triggerEvent.call(this, this.media, eventName);\n            }\n\n            return !hiding;\n        }\n\n        return false;\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    on(event, callback) {\n        on.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Add event listeners once\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    once(event, callback) {\n        once.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Remove event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    off(event, callback) {\n        off(this.elements.container, event, callback);\n    }\n\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {function} callback - Callback for when destroy is complete\n     * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n    destroy(callback, soft = false) {\n        if (!this.ready) {\n            return;\n        }\n\n        const done = () => {\n            // Reset overflow (incase destroyed while in fullscreen)\n            document.body.style.overflow = '';\n\n            // GC for embed\n            this.embed = null;\n\n            // If it's a soft destroy, make minimal changes\n            if (soft) {\n                if (Object.keys(this.elements).length) {\n                    // Remove elements\n                    removeElement(this.elements.buttons.play);\n                    removeElement(this.elements.captions);\n                    removeElement(this.elements.controls);\n                    removeElement(this.elements.wrapper);\n\n                    // Clear for GC\n                    this.elements.buttons.play = null;\n                    this.elements.captions = null;\n                    this.elements.controls = null;\n                    this.elements.wrapper = null;\n                }\n\n                // Callback\n                if (is.function(callback)) {\n                    callback();\n                }\n            } else {\n                // Unbind listeners\n                unbindListeners.call(this);\n\n                // Replace the container with the original element provided\n                replaceElement(this.elements.original, this.elements.container);\n\n                // Event\n                triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n                // Callback\n                if (is.function(callback)) {\n                    callback.call(this.elements.original);\n                }\n\n                // Reset state\n                this.ready = false;\n\n                // Clear for garbage collection\n                setTimeout(() => {\n                    this.elements = null;\n                    this.media = null;\n                }, 200);\n            }\n        };\n\n        // Stop playback\n        this.stop();\n\n        // Provider specific stuff\n        if (this.isHTML5) {\n            // Clear timeout\n            clearTimeout(this.timers.loading);\n\n            // Restore native video controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Clean up\n            done();\n        } else if (this.isYouTube) {\n            // Clear timers\n            clearInterval(this.timers.buffering);\n            clearInterval(this.timers.playing);\n\n            // Destroy YouTube API\n            if (this.embed !== null && is.function(this.embed.destroy)) {\n                this.embed.destroy();\n            }\n\n            // Clean up\n            done();\n        } else if (this.isVimeo) {\n            // Destroy Vimeo API\n            // then clean up (wait, to prevent postmessage errors)\n            if (this.embed !== null) {\n                this.embed.unload().then(done);\n            }\n\n            // Vimeo does not always return\n            setTimeout(done, 200);\n        }\n    }\n\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {string} type - Mime type\n     */\n    supports(type) {\n        return support.mime.call(this, type);\n    }\n\n    /**\n     * Check for support\n     * @param {string} type - Player type (audio/video)\n     * @param {string} provider - Provider (html5/youtube/vimeo)\n     * @param {bool} inline - Where player has `playsinline` sttribute\n     */\n    static supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n    }\n\n    /**\n     * Load an SVG sprite into the page\n     * @param {string} url - URL for the SVG sprite\n     * @param {string} [id] - Unique ID\n     */\n    static loadSprite(url, id) {\n        return loadSprite(url, id);\n    }\n\n    /**\n     * Setup multiple instances\n     * @param {*} selector\n     * @param {object} options\n     */\n    static setup(selector, options = {}) {\n        let targets = null;\n\n        if (is.string(selector)) {\n            targets = Array.from(document.querySelectorAll(selector));\n        } else if (is.nodeList(selector)) {\n            targets = Array.from(selector);\n        } else if (is.array(selector)) {\n            targets = selector.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n            return null;\n        }\n\n        return targets.map(t => new Plyr(t, options));\n    }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.4.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}